package io.airlift.airship.coordinator.auth.ssh; import java.math.BigInteger; import java.security.interfaces.DSAParams; import java.security.interfaces.DSAPublicKey; import java.security.spec.DSAParameterSpec; import java.util.Arrays; public class SshDsaPublicKey implements DSAPublicKey { private final byte[] encoded; private final DSAParams dsaParams; private final BigInteger y; public SshDsaPublicKey(byte[] encoded) { this.encoded = encoded; SshKeyReader sshKeyReader = new SshKeyReader(encoded); if (!sshKeyReader.readString().equals("ssh-dss")) { throw new IllegalArgumentException("Key is not a ssh-dss key"); } dsaParams = new DSAParameterSpec(sshKeyReader.readBigInteger(), sshKeyReader.readBigInteger(), sshKeyReader.readBigInteger()); y = sshKeyReader.readBigInteger(); if (!sshKeyReader.isComplete()) { throw new IllegalArgumentException("Invalid ssh dss key"); } } @Override public String getAlgorithm() { return "DSA"; } @Override public String getFormat() { return "ssh-dss"; } @Override public byte[] getEncoded() { return Arrays.copyOf(encoded, encoded.length); } @Override public DSAParams getParams() { return dsaParams; } @Override public BigInteger getY() { return y; } }