JCEElGamalPublicKey(SubjectPublicKeyInfo info) {
    ElGamalParameter params =
        new ElGamalParameter((ASN1Sequence) info.getAlgorithmId().getParameters());
    DERInteger derY = null;

    try {
      derY = (DERInteger) info.getPublicKey();
    } catch (IOException e) {
      throw new IllegalArgumentException("invalid info structure in DSA public key");
    }

    this.y = derY.getValue();
    this.elSpec = new ElGamalParameterSpec(params.getP(), params.getG());
  }
  JDKGOST3410PublicKey(SubjectPublicKeyInfo info) {
    GOST3410PublicKeyAlgParameters params =
        new GOST3410PublicKeyAlgParameters((ASN1Sequence) info.getAlgorithmId().getParameters());
    DEROctetString derY;

    try {
      derY = (DEROctetString) info.getPublicKey();

      byte[] keyEnc = derY.getOctets();
      byte[] keyBytes = new byte[keyEnc.length];

      for (int i = 0; i != keyEnc.length; i++) {
        keyBytes[i] = keyEnc[keyEnc.length - 1 - i]; // was little endian
      }

      this.y = new BigInteger(1, keyBytes);
    } catch (IOException e) {
      throw new IllegalArgumentException("invalid info structure in GOST3410 public key");
    }

    this.gost3410Spec = GOST3410ParameterSpec.fromPublicKeyAlg(params);
  }