function _mapOutExtensions(&$root, $path, $asn1)
    {
        $extensions = &$this->_subArray($root, $path);

        if (is_array($extensions)) {
            $size = count($extensions);
            for ($i = 0; $i < $size; $i++) {
                if ($extensions[$i] instanceof Element) {
                    continue;
                }

                $id = $extensions[$i]['extnId'];
                $value = &$extensions[$i]['extnValue'];

                switch ($id) {
                    case 'id-ce-certificatePolicies':
                        for ($j = 0; $j < count($value); $j++) {
                            if (!isset($value[$j]['policyQualifiers'])) {
                                continue;
                            }
                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
                                $map = $this->_getMapping($subid);
                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
                                if ($map !== false) {
                                    // by default \phpseclib\File\ASN1 will try to render qualifier as a \phpseclib\File\ASN1::TYPE_IA5_STRING since it's
                                    // actual type is \phpseclib\File\ASN1::TYPE_ANY
                                    $subvalue = new Element($asn1->encodeDER($subvalue, $map));
                                }
                            }
                        }
                        break;
                    case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string
                        if (isset($value['authorityCertSerialNumber'])) {
                            if ($value['authorityCertSerialNumber']->toBytes() == '') {
                                $temp = chr((ASN1::CLASS_CONTEXT_SPECIFIC << 6) | 2) . "\1\0";
                                $value['authorityCertSerialNumber'] = new Element($temp);
                            }
                        }
                }

                /* [extnValue] contains the DER encoding of an ASN.1 value
                   corresponding to the extension type identified by extnID */
                $map = $this->_getMapping($id);
                if (is_bool($map)) {
                    if (!$map) {
                        user_error($id . ' is not a currently supported extension');
                        unset($extensions[$i]);
                    }
                } else {
                    $temp = $asn1->encodeDER($value, $map, array('iPAddress' => array($this, '_encodeIP')));
                    $value = base64_encode($temp);
                }
            }
        }
    }
function _mapOutExtensions(&$root, $path, $asn1)
    {
        $extensions = &$this->_subArray($root, $path);

        if (is_array($extensions)) {
            $size = count($extensions);
            for ($i = 0; $i < $size; $i++) {
                if ($extensions[$i] instanceof Element) {
                    continue;
                }

                $id = $extensions[$i]['extnId'];
                $value = &$extensions[$i]['extnValue'];

                switch ($id) {
                    case 'id-ce-certificatePolicies':
                        for ($j = 0; $j < count($value); $j++) {
                            if (!isset($value[$j]['policyQualifiers'])) {
                                continue;
                            }
                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
                                $map = $this->_getMapping($subid);
                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
                                if ($map !== false) {
                                    // by default \phpseclib\File\ASN1 will try to render qualifier as a \phpseclib\File\ASN1::TYPE_IA5_STRING since it's
                                    // actual type is \phpseclib\File\ASN1::TYPE_ANY
                                    $subvalue = new Element($asn1->encodeDER($subvalue, $map));
                                }
                            }
                        }
                        break;
                    case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string
                        if (isset($value['authorityCertSerialNumber'])) {
                            if ($value['authorityCertSerialNumber']->toBytes() == '') {
                                $temp = chr((ASN1::CLASS_CONTEXT_SPECIFIC << 6) | 2) . "\1\0";
                                $value['authorityCertSerialNumber'] = new Element($temp);
                            }
                        }
                }

                /* [extnValue] contains the DER encoding of an ASN.1 value
                   corresponding to the extension type identified by extnID */
                $map = $this->_getMapping($id);
                if (is_bool($map)) {
                    if (!$map) {
                        user_error($id . ' is not a currently supported extension');
                        unset($extensions[$i]);
                    }
                } else {
                    $temp = $asn1->encodeDER($value, $map, array('iPAddress' => array($this, '_encodeIP')));
                    $value = base64_encode($temp);
                }
            }
        }
    }
function _mapOutExtensions ( & $ root , $ path , $ asn1 ) { $ extensions = & $ this -> _subArray ( $ root , $ path ) ; if ( is_array ( $ extensions ) ) { $ size = count ( $ extensions ) ; for ( $ i = 0 ; $ i < $ size ; $ i ++ ) { if ( $ extensions [ $ i ] instanceof Element ) { continue ; } $ id = $ extensions [ $ i ] [ 'extnId' ] ; $ value = & $ extensions [ $ i ] [ 'extnValue' ] ; switch ( $ id ) { case 'id-ce-certificatePolicies' : for ( $ j = 0 ; $ j < count ( $ value ) ; $ j ++ ) { if ( ! isset ( $ value [ $ j ] [ 'policyQualifiers' ] ) ) { continue ; } for ( $ k = 0 ; $ k < count ( $ value [ $ j ] [ 'policyQualifiers' ] ) ; $ k ++ ) { $ subid = $ value [ $ j ] [ 'policyQualifiers' ] [ $ k ] [ 'policyQualifierId' ] ; $ map = $ this -> _getMapping ( $ subid ) ; $ subvalue = & $ value [ $ j ] [ 'policyQualifiers' ] [ $ k ] [ 'qualifier' ] ; if ( $ map !== false ) { // by default \phpseclib\File\ASN1 will try to render qualifier as a \phpseclib\File\ASN1::TYPE_IA5_STRING since it's // actual type is \phpseclib\File\ASN1::TYPE_ANY $ subvalue = new Element ( $ asn1 -> encodeDER ( $ subvalue , $ map ) ) ; } } } break ; case 'id-ce-authorityKeyIdentifier' : // use 00 as the serial number instead of an empty string if ( isset ( $ value [ 'authorityCertSerialNumber' ] ) ) { if ( $ value [ 'authorityCertSerialNumber' ] -> toBytes ( ) == '' ) { $ temp = chr ( ( ASN1 :: CLASS_CONTEXT_SPECIFIC << 6 ) | 2 ) . "\1\0" ; $ value [ 'authorityCertSerialNumber' ] = new Element ( $ temp ) ; } } } /* [extnValue] contains the DER encoding of an ASN.1 value
                   corresponding to the extension type identified by extnID */ $ map = $ this -> _getMapping ( $ id ) ; if ( is_bool ( $ map ) ) { if ( ! $ map ) { user_error ( $ id . ' is not a currently supported extension' ) ; unset ( $ extensions [ $ i ] ) ; } } else { $ temp = $ asn1 -> encodeDER ( $ value , $ map , array ( 'iPAddress' => array ( $ this , '_encodeIP' ) ) ) ; $ value = base64_encode ( $ temp ) ; } } } }
Map extension values from extension-specific internal format to
octet string.

@param array ref $root
@param string $path
@param object $asn1
@access private
Map extension values from extension - specific internal format to octet string .