/**
  * @see AbstractKeyInstance::deserializeFromObject($obj)
  */
 protected function deserializeFromObject($obj)
 {
     $this->key_p = new MathBigInteger($obj["p"], 16);
     $this->key_q = new MathBigInteger($obj["q"], 16);
     $this->key_g = new MathBigInteger($obj["g"], 16);
     $this->key_x = new MathBigInteger($obj["x"], 16);
     $this->keysize = DSAKeyPair::_getKeySizeFromRSAKeySize(strlen($this->key_p->toBits()));
     return $this;
 }
 /**
  * @see AbstractKeyInstance::deserializeFromObject($obj)
  */
 protected function deserializeFromObject($obj)
 {
     $this->key_p = new MathBigInteger($obj["p"], 16);
     $this->key_q = new MathBigInteger($obj["q"], 16);
     $this->key_g = new MathBigInteger($obj["g"], 16);
     $this->key_y = new MathBigInteger($obj["y"], 16);
     $this->keysize = DSAKeyPair::_getKeySizeFromRSAKeySize(strlen($this->key_y->toBits()));
     $this->key_values = DSAKeyPair::$KEYSIZES[$this->keysize];
     return $this;
 }
    {
        return new DSASecretKey();
    }
    /**
     * Generate keypair
     *
     * Generates a keypair for a given keysize in bits
     *
     * @abstract
     * @access public
     * @static
     * @param int $keysize Keysize in bits
     * @return DSAKeyPair Returning an instance of the key pair
     */
    public static function generate($keysize)
    {
        if (!isset(self::$KEYSIZES[$keysize])) {
            throw new NoSuchAlgorithmException("keysize not supported");
        }
        $static_keys = self::$KEYSIZES[$keysize];
        $instance = new DSAKeyPair();
        $keys = CryptDSA::generate($static_keys["p"], $static_keys["q"], $static_keys["g"]);
        $instance->keysize = $keysize;
        $instance->secretKey = new DSASecretKey($keys["x"], $keysize);
        $instance->publicKey = new DSAPublicKey($keys["y"], $keysize);
        $instance->algorithm = $instance->publicKey->algorithm = $instance->secretKey->algorithm = "DS";
        return $instance;
    }
}
DSAKeyPair::initialize();