private static function get_openssl_key_details($key) { //PEM to DER $lines = explode("\n", trim($key)); unset($lines[count($lines) - 1]); unset($lines[0]); $der = implode('', $lines); $der = base64_decode($der); //DER is in ASN.1 notation $body = new CASNReader(); $body->Read($der); $bodyItems = $body->GetSequence(); if (!empty($bodyItems)) { if (is_object($bodyItems[1]) && is_object($bodyItems[2]) && is_object($bodyItems[3])) { $n = $bodyItems[1]->GetValue(); $e = $bodyItems[2]->GetValue(); $d = $bodyItems[3]->GetValue(); return array("n" => $n, "e" => $e, "d" => $d); } elseif (is_object($bodyItems[2])) { $body = new CASNReader(); $body->Read($bodyItems[2]->GetValue()); $bodyItems = $body->GetSequence(); if (is_object($bodyItems[1]) && is_object($bodyItems[2]) && is_object($bodyItems[3])) { $n = $bodyItems[1]->GetValue(); $e = $bodyItems[2]->GetValue(); $d = $bodyItems[3]->GetValue(); return array("n" => $n, "e" => $e, "d" => $d); } } } return false; }
public function GetSequence() { $arResult = array(); $val = $this->value; while ($val != '') { $sequence = new CASNReader(); $sequence->Read($val); $arResult[] = $sequence; } return $arResult; }