protected function _getKeys($keyId = '')
    {
        // get private key fingerprints
        if ($keyId == '') {
            $operation = '--list-secret-keys';
        } else {
            $operation = '--utf8-strings --list-secret-keys ' . escapeshellarg($keyId);
        }

        // According to The file 'doc/DETAILS' in the GnuPG distribution, using
        // double '--with-fingerprint' also prints the fingerprint for subkeys.
        $arguments = array(
            '--with-colons',
            '--with-fingerprint',
            '--with-fingerprint',
            '--fixed-list-mode'
        );

        $output = '';

        $this->engine->reset();
        $this->engine->setOutput($output);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        $privateKeyFingerprints = array();

        foreach (explode(PHP_EOL, $output) as $line) {
            $lineExp = explode(':', $line);
            if ($lineExp[0] == 'fpr') {
                $privateKeyFingerprints[] = $lineExp[9];
            }
        }

        // get public keys
        if ($keyId == '') {
            $operation = '--list-public-keys';
        } else {
            $operation = '--utf8-strings --list-public-keys ' . escapeshellarg($keyId);
        }

        $output = '';

        $this->engine->reset();
        $this->engine->setOutput($output);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        $keys   = array();
        $key    = null; // current key
        $subKey = null; // current sub-key

        foreach (explode(PHP_EOL, $output) as $line) {
            $lineExp = explode(':', $line);

            if ($lineExp[0] == 'pub') {

                // new primary key means last key should be added to the array
                if ($key !== null) {
                    $keys[] = $key;
                }

                $key = new Crypt_GPG_Key();

                $subKey = Crypt_GPG_SubKey::parse($line);
                $key->addSubKey($subKey);

            } elseif ($lineExp[0] == 'sub') {

                $subKey = Crypt_GPG_SubKey::parse($line);
                $key->addSubKey($subKey);

            } elseif ($lineExp[0] == 'fpr') {

                $fingerprint = $lineExp[9];

                // set current sub-key fingerprint
                $subKey->setFingerprint($fingerprint);

                // if private key exists, set has private to true
                if (in_array($fingerprint, $privateKeyFingerprints)) {
                    $subKey->setHasPrivate(true);
                }

            } elseif ($lineExp[0] == 'uid') {

                $string = stripcslashes($lineExp[9]); // as per documentation
                $userId = new Crypt_GPG_UserId($string);

                if ($lineExp[1] == 'r') {
                    $userId->setRevoked(true);
                }

                $key->addUserId($userId);

            }
        }

        // add last key
        if ($key !== null) {
            $keys[] = $key;
        }

        return $keys;
    }
protected function _getKeys($keyId = '')
    {
        // get private key fingerprints
        if ($keyId == '') {
            $operation = '--list-secret-keys';
        } else {
            $operation = '--utf8-strings --list-secret-keys ' . escapeshellarg($keyId);
        }

        // According to The file 'doc/DETAILS' in the GnuPG distribution, using
        // double '--with-fingerprint' also prints the fingerprint for subkeys.
        $arguments = array(
            '--with-colons',
            '--with-fingerprint',
            '--with-fingerprint',
            '--fixed-list-mode'
        );

        $output = '';

        $this->engine->reset();
        $this->engine->setOutput($output);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        $privateKeyFingerprints = array();

        foreach (explode(PHP_EOL, $output) as $line) {
            $lineExp = explode(':', $line);
            if ($lineExp[0] == 'fpr') {
                $privateKeyFingerprints[] = $lineExp[9];
            }
        }

        // get public keys
        if ($keyId == '') {
            $operation = '--list-public-keys';
        } else {
            $operation = '--utf8-strings --list-public-keys ' . escapeshellarg($keyId);
        }

        $output = '';

        $this->engine->reset();
        $this->engine->setOutput($output);
        $this->engine->setOperation($operation, $arguments);
        $this->engine->run();

        $keys   = array();
        $key    = null; // current key
        $subKey = null; // current sub-key

        foreach (explode(PHP_EOL, $output) as $line) {
            $lineExp = explode(':', $line);

            if ($lineExp[0] == 'pub') {

                // new primary key means last key should be added to the array
                if ($key !== null) {
                    $keys[] = $key;
                }

                $key = new Crypt_GPG_Key();

                $subKey = Crypt_GPG_SubKey::parse($line);
                $key->addSubKey($subKey);

            } elseif ($lineExp[0] == 'sub') {

                $subKey = Crypt_GPG_SubKey::parse($line);
                $key->addSubKey($subKey);

            } elseif ($lineExp[0] == 'fpr') {

                $fingerprint = $lineExp[9];

                // set current sub-key fingerprint
                $subKey->setFingerprint($fingerprint);

                // if private key exists, set has private to true
                if (in_array($fingerprint, $privateKeyFingerprints)) {
                    $subKey->setHasPrivate(true);
                }

            } elseif ($lineExp[0] == 'uid') {

                $string = stripcslashes($lineExp[9]); // as per documentation
                $userId = new Crypt_GPG_UserId($string);

                if ($lineExp[1] == 'r') {
                    $userId->setRevoked(true);
                }

                $key->addUserId($userId);

            }
        }

        // add last key
        if ($key !== null) {
            $keys[] = $key;
        }

        return $keys;
    }
protected function _getKeys ( $ keyId = '' ) { // get private key fingerprints if ( $ keyId == '' ) { $ operation = '--list-secret-keys' ; } else { $ operation = '--utf8-strings --list-secret-keys ' . escapeshellarg ( $ keyId ) ; } // According to The file 'doc/DETAILS' in the GnuPG distribution, using // double '--with-fingerprint' also prints the fingerprint for subkeys. $ arguments = array ( '--with-colons' , '--with-fingerprint' , '--with-fingerprint' , '--fixed-list-mode' ) ; $ output = '' ; $ this -> engine -> reset ( ) ; $ this -> engine -> setOutput ( $ output ) ; $ this -> engine -> setOperation ( $ operation , $ arguments ) ; $ this -> engine -> run ( ) ; $ privateKeyFingerprints = array ( ) ; foreach ( explode ( PHP_EOL , $ output ) as $ line ) { $ lineExp = explode ( ':' , $ line ) ; if ( $ lineExp [ 0 ] == 'fpr' ) { $ privateKeyFingerprints [ ] = $ lineExp [ 9 ] ; } } // get public keys if ( $ keyId == '' ) { $ operation = '--list-public-keys' ; } else { $ operation = '--utf8-strings --list-public-keys ' . escapeshellarg ( $ keyId ) ; } $ output = '' ; $ this -> engine -> reset ( ) ; $ this -> engine -> setOutput ( $ output ) ; $ this -> engine -> setOperation ( $ operation , $ arguments ) ; $ this -> engine -> run ( ) ; $ keys = array ( ) ; $ key = null ; // current key $ subKey = null ; // current sub-key foreach ( explode ( PHP_EOL , $ output ) as $ line ) { $ lineExp = explode ( ':' , $ line ) ; if ( $ lineExp [ 0 ] == 'pub' ) { // new primary key means last key should be added to the array if ( $ key !== null ) { $ keys [ ] = $ key ; } $ key = new Crypt_GPG_Key ( ) ; $ subKey = Crypt_GPG_SubKey :: parse ( $ line ) ; $ key -> addSubKey ( $ subKey ) ; } elseif ( $ lineExp [ 0 ] == 'sub' ) { $ subKey = Crypt_GPG_SubKey :: parse ( $ line ) ; $ key -> addSubKey ( $ subKey ) ; } elseif ( $ lineExp [ 0 ] == 'fpr' ) { $ fingerprint = $ lineExp [ 9 ] ; // set current sub-key fingerprint $ subKey -> setFingerprint ( $ fingerprint ) ; // if private key exists, set has private to true if ( in_array ( $ fingerprint , $ privateKeyFingerprints ) ) { $ subKey -> setHasPrivate ( true ) ; } } elseif ( $ lineExp [ 0 ] == 'uid' ) { $ string = stripcslashes ( $ lineExp [ 9 ] ) ; // as per documentation $ userId = new Crypt_GPG_UserId ( $ string ) ; if ( $ lineExp [ 1 ] == 'r' ) { $ userId -> setRevoked ( true ) ; } $ key -> addUserId ( $ userId ) ; } } // add last key if ( $ key !== null ) { $ keys [ ] = $ key ; } return $ keys ; }
Gets the available keys in the keyring

Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See
the first section of <b>doc/DETAILS</b> in the
{@link http://www.gnupg.org/download/ GPG package} for a detailed
description of how the GPG command output is parsed.

@param string $keyId optional. Only keys with that match the specified
pattern are returned. The pattern may be part of
a user id, a key id or a key fingerprint. If not
specified, all keys are returned.

@return array an array of {@link Crypt_GPG_Key} objects. If no keys
match the specified <kbd>$keyId</kbd> an empty array is
returned.

@throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
Use the <kbd>debug</kbd> option and file a bug report if these
exceptions occur.

@see Crypt_GPG_Key
Gets the available keys in the keyring