mirror of
https://github.com/phpseclib/phpseclib.git
synced 2024-12-27 03:42:40 +00:00
ASN1: asn1map(): do not rely on input fields to determine mapping parameters.
This commit is contained in:
parent
d9a3dafa0a
commit
50962f9cd3
@ -432,12 +432,12 @@ class File_ASN1 {
|
|||||||
*
|
*
|
||||||
* Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format.
|
* Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format.
|
||||||
*
|
*
|
||||||
* @param String $encoded
|
* @param Array $decoded
|
||||||
* @param Integer $start
|
* @param Array $mapping
|
||||||
* @return Array
|
* @return Array
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
function asn1map($decoded, $mapping, $idx = NULL)
|
function asn1map($decoded, $mapping)
|
||||||
{
|
{
|
||||||
if (isset($mapping['explicit'])) {
|
if (isset($mapping['explicit'])) {
|
||||||
$decoded = $decoded['content'][0];
|
$decoded = $decoded['content'][0];
|
||||||
@ -506,13 +506,18 @@ class File_ASN1 {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$childClass = $tempClass = FILE_ASN1_CLASS_UNIVERSAL;
|
||||||
|
$constant = NULL;
|
||||||
if (isset($temp['constant'])) {
|
if (isset($temp['constant'])) {
|
||||||
$tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
|
$tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
|
||||||
$childClass = isset($child['class']) ? $child['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
|
}
|
||||||
$constant = isset($temp['class']) ? $child['cast'] : $child['constant'];
|
if (isset($child['class'])) {
|
||||||
} else {
|
$childClass = $child['class'];
|
||||||
$childClass = $tempClass = FILE_ASN1_CLASS_UNIVERSAL;
|
$constant = $child['cast'];
|
||||||
$constant = NULL;
|
}
|
||||||
|
elseif (isset($child['constant'])) {
|
||||||
|
$childClass = FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
|
||||||
|
$constant = $child['constant'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($child['optional'])) {
|
if (isset($child['optional'])) {
|
||||||
@ -590,14 +595,20 @@ class File_ASN1 {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$childClass = $tempClass = FILE_ASN1_CLASS_UNIVERSAL;
|
||||||
|
$constant = NULL;
|
||||||
if (isset($temp['constant'])) {
|
if (isset($temp['constant'])) {
|
||||||
$tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
|
$tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
|
||||||
$childClass = isset($child['class']) ? $child['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
|
|
||||||
$constant = isset($temp['class']) ? $child['cast'] : $child['constant'];
|
|
||||||
} else {
|
|
||||||
$childClass = $tempClass = FILE_ASN1_CLASS_UNIVERSAL;
|
|
||||||
$constant = NULL;
|
|
||||||
}
|
}
|
||||||
|
if (isset($child['class'])) {
|
||||||
|
$childClass = $child['class'];
|
||||||
|
$constant = $child['cast'];
|
||||||
|
}
|
||||||
|
elseif (isset($child['constant'])) {
|
||||||
|
$childClass = FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
|
||||||
|
$constant = $child['constant'];
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($constant) && isset($temp['constant'])) {
|
if (isset($constant) && isset($temp['constant'])) {
|
||||||
if (($constant == $temp['constant']) && ($childClass == $tempClass)) {
|
if (($constant == $temp['constant']) && ($childClass == $tempClass)) {
|
||||||
$map[$key] = $this->asn1map($temp['content'], $child);
|
$map[$key] = $this->asn1map($temp['content'], $child);
|
||||||
|
Loading…
Reference in New Issue
Block a user