/** * Parse a public key. * <p> * This method accepts the bytes that are Base64 encoded in an OpenSSH public key file. * * @param encoded The key. * @return An AsymmetricKeyParameter instance. */ public static AsymmetricKeyParameter parsePublicKey(byte[] encoded) { SSHBuffer buffer = new SSHBuffer(encoded); return parsePublicKey(buffer); }
public BigInteger positiveBigNum() { int len = readU32(); if (pos + len > buffer.length) { throw new IllegalArgumentException("not enough data for big num"); } byte[] d = new byte[len]; System.arraycopy(buffer, pos, d, 0, d.length); pos += len; return new BigInteger(1, d); }
SSHBuffer kIn = new SSHBuffer(AUTH_MAGIC, blob); String cipherName = Strings.fromByteArray(kIn.readString()); kIn.readString(); kIn.readString(); long publicKeyCount = kIn.readU32(); OpenSSHPublicKeyUtil.parsePublicKey(kIn.readString()); SSHBuffer pkIn = new SSHBuffer(kIn.readPaddedString()); int check1 = pkIn.readU32(); int check2 = pkIn.readU32(); String keyType = Strings.fromByteArray(pkIn.readString()); pkIn.readString(); byte[] edPrivateKey = pkIn.readString();
String magic = Strings.fromByteArray(buffer.readString()); if (RSA.equals(magic)) BigInteger e = buffer.positiveBigNum(); BigInteger n = buffer.positiveBigNum(); result = new RSAKeyParameters(false, n, e); BigInteger p = buffer.positiveBigNum(); BigInteger q = buffer.positiveBigNum(); BigInteger g = buffer.positiveBigNum(); BigInteger pubKey = buffer.positiveBigNum(); String curveName = Strings.fromByteArray(buffer.readString()); String nameToFind = curveName; byte[] pointRaw = buffer.readString(); result = new Ed25519PublicKeyParameters(buffer.readString(), 0); if (buffer.hasRemaining())
public byte[] readString() { int len = readU32(); if (len == 0) { return new byte[0]; } if (pos + len > buffer.length) { throw new IllegalArgumentException("not enough data for string"); } return Arrays.copyOfRange(buffer, pos, pos += len); }
public byte[] readPaddedString() { int len = readU32(); if (len == 0) { return new byte[0]; } if (pos + len > buffer.length) { throw new IllegalArgumentException("not enough data for string"); } return Arrays.copyOfRange(buffer, pos, pos += (len - (buffer[pos + len - 1] & 0xff))); }