Skip to content

Unknown echo protocol identifier #6

@imobdevtech

Description

@imobdevtech

Hello,

I am planning to implement Noise protocol in My Android Application, I have tried to create demo from the existing Java code and Noise-C code, but every time when I send message through socket to my Noise-Server I get Unknown echo protocol identifier error. Below is my code, will you please help me to find the issue in it.

public String bytesToHex(byte[] bytes) {
char[] hexArray = "0123456789ABCDEF".toCharArray();
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}

public NoiseManager(final Context context) {

    Observable.fromCallable(new Callable<Void>() {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        public Void call() throws Exception {

            try {
                HandshakeState initiator = new HandshakeState("Noise_XX_25519_ChaChaPoly_SHA256", INITIATOR);
            
                String init_prologue = "";
             
                TestMessage testMessage = new TestMessage();
                testMessage.ciphertext = bytesToHex("\\n".getBytes());
                testMessage.payload = bytesToHex("\\n".getBytes());

                if (initiator.needsLocalKeyPair()) {
                    StringBuilder clientKey = new StringBuilder();

                    String host = "localhost";
                    int port = 7000;
                    InetAddress address = InetAddress.getByName(host);
                    Socket socket = new Socket(address, port);

                    BufferedReader reader = null, reader1 = null;
                    try {
                        reader = new BufferedReader(
                                new InputStreamReader(context.getAssets().open("client_key_25519"),
                                        "UTF-8"));

                        String line;
                        while ((line = reader.readLine()) != null) {
                            clientKey.append(line);
                        }

                        initiator.getLocalKeyPair().setPrivateKey(clientKey.toString().getBytes()
                                , 0);

                        initiator.start();

                        byte[] message = new byte[128];
                        byte[] plaintext = new byte[128];

                        int len = 0;

                        while (true) {
                            if (initiator.getAction() == WRITE_MESSAGE) {
                                len = initiator.writeMessage(message, 0,
                                        testMessage.payload.getBytes(), 0,
                                        testMessage.payload.getBytes().length);

                                OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
                                BufferedWriter bw = new BufferedWriter(osw);
                                String strMessage = new String(message, "UTF-8");
                                bw.write(strMessage);
                                bw.flush();

                                Log.e(NoiseManager.class.getSimpleName(),
                                        "Message sent to the server : " + strMessage);
                            }  else {
                                break;
                            }
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        if (reader != null) {
                            try {
                                reader.close();
                                //socket.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }

                }
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return null;
        }
    }).observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(new Subscriber<Void>() {
                @Override
                public void onCompleted() {
                    Log.e(NoiseManager.class.getSimpleName(), "onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    e.printStackTrace();
                    Log.e(NoiseManager.class.getSimpleName(), "onError");
                }

                @Override
                public void onNext(Void o) {
                    Log.e(NoiseManager.class.getSimpleName(), "onNext");
                }
            });
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions