[ https://issues.apache.org/jira/browse/SSHD-1297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Hammer updated SSHD-1297: -------------------------------- Description: Hi SSHD gurus, I'm attempting to utilize {{org.apache.sshd.common.util.buffer.ByteArrayBuffer}} to load a {{java.security.PublicKey}}, in-order to subsequently register the public key in a {{{}org.apache.sshd.server.auth.pubkey.PublickeyAuthenticator{}}}. Ie. the idea is something like this {code:java} PublicKey myPublicKey; try (InputStream is = new FileInputStream("/home/my-user/tmp/test_rsa_key.pub")) { ByteArrayBuffer buffer = new ByteArrayBuffer(org.apache.sshd.common.util.io.IoUtils.IoUtils.toByteArray(is)); myPublicKey = buffer.getPublicKey(); // -> OutOfMemoryError: Java heap space ..? // myPublicKey = buffer.getRawPublicKey(); // -> Underflow ..? } ServerBuilder.builder() .publickeyAuthenticator(new KeySetPublickeyAuthenticator("my id", List.of(myPublicKey))) .build(); {code} Resulting in the below exceptions, caused by internal guarding in {{ByteArrayBuffer}} before the {{ByteArrayBuffer.data}} would be processed. {{{}getPublicKey(){}}}: {code:java} java.lang.OutOfMemoryError: Java heap space at org.apache.sshd.common.util.buffer.ByteArrayBuffer.ensureCapacity(ByteArrayBuffer.java:277) at org.apache.sshd.common.util.buffer.Buffer.ensureCapacity(Buffer.java:1105) at org.apache.sshd.common.util.buffer.ByteArrayBuffer.wpos(ByteArrayBuffer.java:139) at org.apache.sshd.common.util.buffer.Buffer.getPublicKey(Buffer.java:521) at org.apache.sshd.common.util.buffer.Buffer.getPublicKey(Buffer.java:505) {code} {{{}getRawPublicKey(){}}}: {code:java} org.apache.sshd.common.util.buffer.BufferException: Underflow: requested=1936943149, available=737 at app//org.apache.sshd.common.util.buffer.Buffer.ensureAvailable(Buffer.java:640) at app//org.apache.sshd.common.util.buffer.ByteArrayBuffer.getString(ByteArrayBuffer.java:241) at app//org.apache.sshd.common.util.buffer.Buffer.getString(Buffer.java:309) at app//org.apache.sshd.common.util.buffer.Buffer.getRawPublicKey(Buffer.java:541) at app//org.apache.sshd.common.util.buffer.Buffer.getRawPublicKey(Buffer.java:530) {code} Seemingly my approach is incompatible with the available logic, unfortunately I've been unable to uncover documentation or Javadoc that could aid. So as a last resort I'm turning to you gurus, in hopes of enlightenment (+ perhaps a PR guiding future developers in the desired direction via documentation / Javadoc). Thanks in advance 🙏 was: Hi SSHD gurus, I'm attempting to utilize {{org.apache.sshd.common.util.buffer.ByteArrayBuffer}} to load a {{java.security.PublicKey}} in-order to subsequently register the public key in a {{{}org.apache.sshd.server.auth.pubkey.PublickeyAuthenticator{}}}. Ie. the idea is something like this {code:java} PublicKey myPublicKey; try (InputStream is = new FileInputStream("/home/my-user/tmp/test_rsa_key.pub")) { ByteArrayBuffer buffer = new ByteArrayBuffer(org.apache.sshd.common.util.io.IoUtils.IoUtils.toByteArray(is)); myPublicKey = buffer.getPublicKey(); // -> OutOfMemoryError: Java heap space ..? // myPublicKey = buffer.getRawPublicKey(); // -> Underflow ..? } ServerBuilder.builder() .publickeyAuthenticator(new KeySetPublickeyAuthenticator("my id", List.of(myPublicKey))) .build(); {code} Resulting in the below exceptions, caused by internal guarding in {{ByteArrayBuffer}} before the {{ByteArrayBuffer.data}} would be processed. {{{}getPublicKey(){}}}: {code:java} java.lang.OutOfMemoryError: Java heap space at org.apache.sshd.common.util.buffer.ByteArrayBuffer.ensureCapacity(ByteArrayBuffer.java:277) at org.apache.sshd.common.util.buffer.Buffer.ensureCapacity(Buffer.java:1105) at org.apache.sshd.common.util.buffer.ByteArrayBuffer.wpos(ByteArrayBuffer.java:139) at org.apache.sshd.common.util.buffer.Buffer.getPublicKey(Buffer.java:521) at org.apache.sshd.common.util.buffer.Buffer.getPublicKey(Buffer.java:505) {code} {{{}getRawPublicKey(){}}}: {code:java} org.apache.sshd.common.util.buffer.BufferException: Underflow: requested=1936943149, available=737 at app//org.apache.sshd.common.util.buffer.Buffer.ensureAvailable(Buffer.java:640) at app//org.apache.sshd.common.util.buffer.ByteArrayBuffer.getString(ByteArrayBuffer.java:241) at app//org.apache.sshd.common.util.buffer.Buffer.getString(Buffer.java:309) at app//org.apache.sshd.common.util.buffer.Buffer.getRawPublicKey(Buffer.java:541) at app//org.apache.sshd.common.util.buffer.Buffer.getRawPublicKey(Buffer.java:530) {code} Seemingly my approach is incompatible with the available logic, unfortunately I've been unable to uncover documentation or Javadoc that could aid. So as a last resort I'm turning to you gurus, in hopes of enlightenment (+ perhaps a PR guiding future developers in the desired direction via documentation / Javadoc). Thanks in advance 🙏 > Load public key from file > ------------------------- > > Key: SSHD-1297 > URL: https://issues.apache.org/jira/browse/SSHD-1297 > Project: MINA SSHD > Issue Type: Bug > Affects Versions: 2.9.1 > Reporter: Daniel Hammer > Priority: Minor > > Hi SSHD gurus, > I'm attempting to utilize > {{org.apache.sshd.common.util.buffer.ByteArrayBuffer}} to load a > {{java.security.PublicKey}}, in-order to subsequently register the public key > in a {{{}org.apache.sshd.server.auth.pubkey.PublickeyAuthenticator{}}}. > Ie. the idea is something like this > {code:java} > PublicKey myPublicKey; > try (InputStream is = new > FileInputStream("/home/my-user/tmp/test_rsa_key.pub")) { > ByteArrayBuffer buffer = new > ByteArrayBuffer(org.apache.sshd.common.util.io.IoUtils.IoUtils.toByteArray(is)); > myPublicKey = buffer.getPublicKey(); // -> OutOfMemoryError: Java heap > space ..? > // myPublicKey = buffer.getRawPublicKey(); // -> Underflow ..? > } > ServerBuilder.builder() > .publickeyAuthenticator(new KeySetPublickeyAuthenticator("my id", > List.of(myPublicKey))) > .build(); > {code} > Resulting in the below exceptions, caused by internal guarding in > {{ByteArrayBuffer}} before the {{ByteArrayBuffer.data}} would be processed. > {{{}getPublicKey(){}}}: > {code:java} > java.lang.OutOfMemoryError: Java heap space > at > org.apache.sshd.common.util.buffer.ByteArrayBuffer.ensureCapacity(ByteArrayBuffer.java:277) > at > org.apache.sshd.common.util.buffer.Buffer.ensureCapacity(Buffer.java:1105) > at > org.apache.sshd.common.util.buffer.ByteArrayBuffer.wpos(ByteArrayBuffer.java:139) > at > org.apache.sshd.common.util.buffer.Buffer.getPublicKey(Buffer.java:521) > at > org.apache.sshd.common.util.buffer.Buffer.getPublicKey(Buffer.java:505) > {code} > {{{}getRawPublicKey(){}}}: > {code:java} > org.apache.sshd.common.util.buffer.BufferException: Underflow: > requested=1936943149, available=737 > at > app//org.apache.sshd.common.util.buffer.Buffer.ensureAvailable(Buffer.java:640) > at > app//org.apache.sshd.common.util.buffer.ByteArrayBuffer.getString(ByteArrayBuffer.java:241) > at > app//org.apache.sshd.common.util.buffer.Buffer.getString(Buffer.java:309) > at > app//org.apache.sshd.common.util.buffer.Buffer.getRawPublicKey(Buffer.java:541) > at > app//org.apache.sshd.common.util.buffer.Buffer.getRawPublicKey(Buffer.java:530) > {code} > Seemingly my approach is incompatible with the available logic, unfortunately > I've been unable to uncover documentation or Javadoc that could aid. > So as a last resort I'm turning to you gurus, in hopes of enlightenment (+ > perhaps a PR guiding future developers in the desired direction via > documentation / Javadoc). > Thanks in advance 🙏 -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org For additional commands, e-mail: dev-h...@mina.apache.org