aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriendika <info@friendika.com>2011-07-28 18:16:57 -0700
committerFriendika <info@friendika.com>2011-07-28 18:16:57 -0700
commit8042f874f305bdc4a02f9b39efea9c9e0f1a82a7 (patch)
treebbeba5cd3cbaf53a2fdda2c7dec3eb81a070c264
parent0a3c9017d0d3d5491c5806ce85f6813c0b202e59 (diff)
downloadvolse-hubzilla-8042f874f305bdc4a02f9b39efea9c9e0f1a82a7.tar.gz
volse-hubzilla-8042f874f305bdc4a02f9b39efea9c9e0f1a82a7.tar.bz2
volse-hubzilla-8042f874f305bdc4a02f9b39efea9c9e0f1a82a7.zip
more progress on key conversion functions
-rw-r--r--include/certfns.php97
1 files changed, 94 insertions, 3 deletions
diff --git a/include/certfns.php b/include/certfns.php
index 70d2b54a0..db0e4645e 100644
--- a/include/certfns.php
+++ b/include/certfns.php
@@ -19,12 +19,32 @@ function DerToPem($Der, $Private=false)
return $result;
}
+function DerToRsa($Der)
+{
+ //Encode:
+ $Der = base64_encode($Der);
+ //Split lines:
+ $lines = str_split($Der, 65);
+ $body = implode("\n", $lines);
+ //Get title:
+ $title = 'RSA PUBLIC KEY';
+ //Add wrapping:
+ $result = "-----BEGIN {$title}-----\n";
+ $result .= $body . "\n";
+ $result .= "-----END {$title}-----\n";
+
+ return $result;
+}
+
+
+
+
function pkcs8_encode($Modulus,$PublicExponent) {
//Encode key sequence
$modulus = new ASNValue(ASNValue::TAG_INTEGER);
$modulus->SetIntBuffer($Modulus);
$publicExponent = new ASNValue(ASNValue::TAG_INTEGER);
- $publicExponent->SetInt($PublicExponent);
+ $publicExponent->SetIntBuffer($PublicExponent);
$keySequenceItems = array($modulus, $publicExponent);
$keySequence = new ASNValue(ASNValue::TAG_SEQUENCE);
$keySequence->SetSequence($keySequenceItems);
@@ -43,10 +63,81 @@ function pkcs8_encode($Modulus,$PublicExponent) {
}
+function pkcs1_encode($Modulus,$PublicExponent) {
+ //Encode key sequence
+ $modulus = new ASNValue(ASNValue::TAG_INTEGER);
+ $modulus->SetIntBuffer($Modulus);
+ $publicExponent = new ASNValue(ASNValue::TAG_INTEGER);
+ $publicExponent->SetIntBuffer($PublicExponent);
+ $keySequenceItems = array($modulus, $publicExponent);
+ $keySequence = new ASNValue(ASNValue::TAG_SEQUENCE);
+ $keySequence->SetSequence($keySequenceItems);
+ //Encode bit string
+ $bitStringValue = $keySequence->Encode();
+ return $bitStringValue;
+
+// $bitStringValue = chr(0x00) . $bitStringValue; //Add unused bits byte
+// $bitString = new ASNValue(ASNValue::TAG_BITSTRING);
+// $bitString->Value = $bitStringValue;
+ //Encode body
+// $bodyValue = "\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01\x05\x00" . $bitString->Encode();
+// $body = new ASNValue(ASNValue::TAG_SEQUENCE);
+// $body->Value = $bodyValue;
+ //Get DER encoded public key:
+// $PublicDER = $body->Encode();
+// return $PublicDER;
+}
+
+
function metopem($m,$e) {
- $der = pkcs8_emcode($m,$e);
- $key = DerToPem($der,true);
+ $der = pkcs8_encode($m,$e);
+ $key = DerToPem($der,false);
return $key;
}
+function pubrsatome($key,&$m,&$e) {
+ require_once('library/asn1.php');
+ require_once('include/salmon.php');
+
+ $lines = explode("\n",$key);
+ unset($lines[0]);
+ unset($lines[count($lines)]);
+ $x = base64_decode(implode('',$lines));
+
+ $r = ASN_BASE::parseASNString($x);
+
+// print_r($r);
+
+ $m = base64url_decode($r[0]->asnData[0]->asnData);
+ $e = base64url_decode($r[0]->asnData[1]->asnData);
+
+
+}
+
+
+function rsatopem($key) {
+ pubrsatome($key,$m,$e);
+ return(metopem($m,$e));
+}
+
+
+function pemtome($key,&$m,&$e) {
+ require_once('include/salmon.php');
+ $lines = explode("\n",$key);
+ unset($lines[0]);
+ unset($lines[count($lines)]);
+ $x = base64_decode(implode('',$lines));
+
+ $r = ASN_BASE::parseASNString($x);
+
+ $m = base64url_decode($r[0]->asnData[1]->asnData[0]->asnData[0]->asnData);
+ $e = base64url_decode($r[0]->asnData[1]->asnData[0]->asnData[1]->asnData);
+}
+
+function metorsa($m,$e) {
+ $der = pkcs1_encode($m,$e);
+ $key = DerToRsa($der);
+ return $key;
+}
+