]> git.mxchange.org Git - friendica-addons.git/blobdiff - securemail/php-gpg/libs/GPG/globals.php
New experimental plugin 'secure mail'
[friendica-addons.git] / securemail / php-gpg / libs / GPG / globals.php
diff --git a/securemail/php-gpg/libs/GPG/globals.php b/securemail/php-gpg/libs/GPG/globals.php
new file mode 100644 (file)
index 0000000..5b2dbce
--- /dev/null
@@ -0,0 +1,403 @@
+<?php\r
+/** @package    php-gpg::GPG */\r
+\r
+/** assign globals */\r
+global $bs;\r
+global $bx2;\r
+global $bm;\r
+global $bx;\r
+global $bd;\r
+global $bdm;\r
+\r
+$bs = 28;\r
+$bx2 = 1 << $bs;\r
+$bm = $bx2 - 1;\r
+$bx = $bx2 >> 1;\r
+$bd = $bs >> 1;\r
+$bdm = (1 << $bd) - 1;\r
+\r
+/**\r
+ */\r
+function mpi2b($s)\r
+{\r
+    global $bs;\r
+    global $bx2;\r
+    global $bm;\r
+    global $bx;\r
+    global $bd;\r
+    global $bdm;\r
+\r
+    $bn = 1;\r
+    $r = array(0);\r
+    $rn = 0;\r
+    $sb = 256;\r
+    $c = 0;\r
+    $sn = strlen($s);\r
+    if($sn < 2) {\r
+        echo("string too short, not a MPI");\r
+        return 0;\r
+    }\r
+\r
+    $len = ($sn - 2) * 8;\r
+    $bits = ord($s[0]) * 256 + ord($s[1]);\r
+    if ($bits > $len || $bits < $len - 8) {\r
+        echo("not a MPI, bits = $bits, len = $len");\r
+        return 0;\r
+    }\r
+\r
+    for ($n = 0; $n < $len; $n++) {\r
+        if (($sb <<= 1) > 255) {\r
+            $sb = 1; $c = ord($s[--$sn]);\r
+        }\r
+        if ($bn > $bm) {\r
+            $bn = 1;\r
+            $r[++$rn]=0;\r
+        }\r
+        if ($c & $sb) $r[$rn] |= $bn;\r
+        $bn <<= 1;\r
+    }\r
+\r
+    return $r;\r
+}\r
+\r
+/**\r
+ */\r
+function b2mpi($b)\r
+{\r
+    global $bs;\r
+    global $bx2;\r
+    global $bm;\r
+    global $bx;\r
+    global $bd;\r
+    global $bdm;\r
+\r
+    $bn = 1;\r
+    $bc = 0;\r
+    $r = array(0);\r
+    $rb = 1;\r
+    $rn = 0;\r
+    $bits = count($b) * $bs;\r
+    $n = 0;\r
+    $rr = "";\r
+\r
+    for ($n = 0; $n < $bits; $n++) {\r
+        if ($b[$bc] & $bn) $r[$rn] |= $rb;\r
+        if(($rb <<= 1) > 255) {\r
+            $rb = 1; $r[++$rn]=0;\r
+        }\r
+        if (($bn <<= 1) > $bm) {\r
+            $bn=1; $bc++;\r
+        }\r
+    }\r
+\r
+    while ($rn && $r[$rn]==0) $rn--;\r
+\r
+    $bn=256;\r
+    for($bits = 8; $bits > 0; $bits--) if ($r[$rn] & ($bn >>= 1)) break;\r
+    $bits += $rn * 8;\r
+\r
+    $rr .= chr($bits / 256 ) . chr($bits % 256);\r
+    if ($bits) for($n = $rn; $n >= 0; $n--) $rr .= chr($r[$n]);\r
+\r
+    return $rr;\r
+}\r
+\r
+/**\r
+ */\r
+function bmodexp($xx, $y, $m) {\r
+    global $bs;\r
+    global $bx2;\r
+    global $bm;\r
+    global $bx;\r
+    global $bd;\r
+    global $bdm;\r
+\r
+    $r = array(1);\r
+    $an = 0;\r
+    $a = 0;\r
+    $x = array_merge((array)$xx);\r
+    $n = count($m) * 2;\r
+    $mu = array_fill(0, $n + 1, 0);\r
+\r
+    $mu[$n--] = 1;\r
+    for(; $n >= 0; $n--) $mu[$n] = 0;\r
+    $dd = new bdiv($mu, $m);\r
+    $mu = $dd->q;\r
+\r
+    for($n = 0; $n < count($y); $n++) {\r
+        for ($a = 1, $an = 0; $an < $bs; $an++, $a <<= 1) {\r
+            if ($y[$n] & $a) $r = bmod2(bmul($r, $x), $m, $mu);\r
+            $x = bmod2(bmul($x, $x), $m, $mu);\r
+        }\r
+    }\r
+\r
+    return $r;\r
+}\r
+\r
+/**\r
+ */\r
+function simplemod($i, $m) // returns the mod where m < 2^bd\r
+{\r
+    $c = 0;\r
+    $v = 0;\r
+    for ($n = count($i) - 1; $n >= 0; $n--)\r
+    {\r
+        $v = $i[$n];\r
+        $c = (($v >> $bd) + ($c << $bd)) % $m;\r
+        $c = (($v & $bdm) + ($c << $bd)) % $m;\r
+    }\r
+\r
+    return $c;\r
+}\r
+\r
+/**\r
+ */\r
+function bmod($p, $m) // binary modulo\r
+{\r
+    global $bdm;\r
+\r
+    if (count($m) == 1) {\r
+        if(count($p) == 1) return array($p[0] % $m[0]);\r
+        if($m[0] < $bdm) return array(simplemod($p, $m[0]));\r
+    }\r
+\r
+    $r = new bdiv($p, $m);\r
+    return $r->mod;\r
+}\r
+\r
+/**\r
+ */\r
+function bmod2($x, $m, $mu) {\r
+    $xl = count($x) - (count($m) << 1);\r
+    if ($xl > 0) return bmod2(array_concat(array_slice($x, 0, $xl), bmod2(array_slice($x, $xl), $m, $mu)), $m, $mu);\r
+\r
+    $ml1 = count($m) + 1;\r
+    $ml2 = count($m) - 1;\r
+    $rr = 0;\r
+\r
+    $q3 = array_slice(bmul(array_slice($x, $ml2), $mu), $ml1);\r
+    $r1 = array_slice($x, 0, $ml1);\r
+    $r2 = array_slice(bmul($q3, $m), 0, $ml1);\r
+\r
+    $r = bsub($r1, $r2);\r
+    if (count($r) == 0) {\r
+        $r1[$ml1] = 1;\r
+        $r = bsub($r1, $r2);\r
+    }\r
+    for ($n = 0;; $n++) {\r
+        $rr = bsub($r, $m);\r
+        if(count($rr) == 0) break;\r
+        $r = $rr;\r
+        if($n >= 3) return bmod2($r, $m, $mu);\r
+    }\r
+\r
+    return $r;\r
+}\r
+\r
+/**\r
+ */\r
+function toppart($x, $start, $len) {\r
+    global $bx2;\r
+\r
+    $n = 0;\r
+    while ($start >= 0 && $len-- > 0) $n = $n * $bx2 + $x[$start--];\r
+\r
+    return $n;\r
+}\r
+\r
+/**\r
+ */\r
+function zeros($n) {\r
+    $r = array_fill(0, $n, 0);\r
+    while ($n-- > 0) $r[$n] = 0;\r
+    return $r;\r
+}\r
+\r
+/**\r
+ * @package    verysimple::Encryption\r
+ */\r
+class bdiv {\r
+       var $q;\r
+       var $mod;\r
+       function bdiv($x, $y)\r
+       {\r
+               global $bs;\r
+               global $bx2;\r
+               global $bm;\r
+               global $bx;\r
+               global $bd;\r
+               global $bdm;\r
+\r
+               $n = count($x) - 1;\r
+               $t = count($y) - 1;\r
+               $nmt = $n - $t;\r
+\r
+               if ($n < $t || $n == $t && ($x[$n] < $y[$n] || $n > 0 && $x[$n] == $y[$n] && $x[$n - 1] < $y[$n - 1])) {\r
+                       $this->q = array(0);\r
+                       $this->mod = array($x);\r
+                       return;\r
+               }\r
+\r
+               if ($n == $t && toppart($x, $t, 2) / toppart($y, $t, 2) < 4) {\r
+                       $qq = 0;\r
+                       $xx = 0;\r
+                       for(;;) {\r
+                               $xx = bsub($x, $y);\r
+                               if(count($xx) == 0) break;\r
+                               $x = $xx; $qq++;\r
+                       }\r
+                       $this->q = array($qq);\r
+                       $this->mod = $x;\r
+                       return;\r
+               }\r
+\r
+               $shift2 = floor(log($y[$t]) / M_LN2) + 1;\r
+               $shift = $bs - $shift2;\r
+               if ($shift) {\r
+                       $x = array_merge((array)$x); $y = array_merge((array)$y);\r
+                       for($i = $t; $i > 0; $i--) $y[$i] = (($y[$i] << $shift) & $bm) | ($y[$i - 1] >> $shift2);\r
+                       $y[0] = ($y[0] << $shift) & $bm;\r
+                       if($x[$n] & (($bm << $shift2) & $bm)) {\r
+                               $x[++$n] = 0; $nmt++;\r
+                       }\r
+                       for($i = $n; $i > 0; $i--) $x[$i] = (($x[$i] << $shift) & $bm) | ($x[$i - 1] >> $shift2);\r
+                       $x[0] = ($x[0] << $shift) & $bm;\r
+               }\r
+\r
+               $i = 0;\r
+               $j = 0;\r
+               $x2 = 0;\r
+               $q = zeros($nmt + 1);\r
+               $y2 = array_merge(zeros($nmt), (array)$y);\r
+               for (;;) {\r
+                       $x2 = bsub($x, $y2);\r
+                       if(count($x2) == 0) break;\r
+                       $q[$nmt]++;\r
+                       $x = $x2;\r
+               }\r
+\r
+               $yt = $y[$t];\r
+               $top =toppart($y, $t, 2);\r
+               for ($i = $n; $i > $t; $i--) {\r
+                       $m = $i - $t - 1;\r
+                       if ($i >= count($x)) $q[$m] = 1;\r
+                       else if($x[$i] == $yt) $q[$m] = $bm;\r
+                       else $q[$m] = floor(toppart($x, $i, 2) / $yt);\r
+\r
+                       $topx = toppart($x, $i, 3);\r
+                       while ($q[$m] * $top > $topx) $q[$m]--;\r
+\r
+                       $y2 = array_slice($y2, 1);\r
+                       $x2 = bsub($x, bmul(array($q[$m]), $y2));\r
+                       if (count($x2) == 0) {\r
+                               $q[$m]--;\r
+                               $x2 =bsub($x, bmul(array($q[m]), $y2));\r
+                       }\r
+                       $x = $x2;\r
+               }\r
+\r
+               if ($shift) {\r
+                       for($i = 0; $i < count($x) - 1; $i++) $x[$i] = ($x[$i] >> $shift) | (($x[$i + 1] << $shift2) & $bm);\r
+                       $x[count($x) - 1] >>= $shift;\r
+               }\r
+               $n = count($q);\r
+               while ($n > 1 && $q[$n - 1] == 0) $n--;\r
+               $this->q = array_slice($q, 0, $n);\r
+               $n = count($x);\r
+               while ($n > 1 && $x[$n - 1] == 0) $n--;\r
+               $this->mod = array_slice($x, 0, $n);\r
+       }\r
+}\r
+\r
+/**\r
+ */\r
+function bsub($a, $b) {\r
+    global $bs;\r
+    global $bx2;\r
+    global $bm;\r
+    global $bx;\r
+    global $bd;\r
+    global $bdm;\r
+\r
+    $al = count($a);\r
+    $bl = count($b);\r
+\r
+    if ($bl > $al) return array();\r
+    if ($bl == $al) {\r
+        if($b[$bl - 1] > $a[$bl - 1]) return array();\r
+        if($bl == 1) return array($a[0] - $b[0]);\r
+    }\r
+\r
+    $r = array_fill(0, $al, 0);\r
+    $c = 0;\r
+\r
+    for ($n = 0; $n < $bl; $n++) {\r
+        $c += $a[$n] - $b[$n];\r
+        $r[$n] = $c & $bm;\r
+        $c >>= $bs;\r
+    }\r
+    for (; $n < $al; $n++) {\r
+        $c += $a[$n];\r
+        $r[$n] = $c & $bm;\r
+        $c >>= $bs;\r
+    }\r
+    if ($c) return array();\r
+\r
+    if ($r[$n - 1]) return $r;\r
+    while ($n > 1 && $r[$n - 1] == 0) $n--;\r
+\r
+    return array_slice($r, 0, $n);\r
+}\r
+\r
+/**\r
+ */\r
+function bmul($a, $b) {\r
+    global $bs;\r
+    global $bx2;\r
+    global $bm;\r
+    global $bx;\r
+    global $bd;\r
+    global $bdm;\r
+\r
+    $b = array_merge((array)$b, array(0));\r
+    $al = count($a);\r
+    $bl = count($b);\r
+    $n = 0;\r
+    $nn = 0;\r
+    $aa = 0;\r
+    $c = 0;\r
+    $m = 0;\r
+    $g = 0;\r
+    $gg = 0;\r
+    $h = 0;\r
+    $hh = 0;\r
+    $ghh = 0;\r
+    $ghhb = 0;\r
+\r
+    $r = zeros($al + $bl + 1);\r
+\r
+    for ($n = 0; $n < $al; $n++) {\r
+        $aa = $a[$n];\r
+        if ($aa) {\r
+            $c = 0;\r
+            $hh = $aa >> $bd; $h = $aa & $bdm;\r
+            $m = $n;\r
+            for ($nn = 0; $nn < $bl; $nn++, $m++) {\r
+                $g = $b[$nn]; $gg = $g >> $bd; $g = $g & $bdm;\r
+                $ghh = $g * $hh + $h * $gg;\r
+                $ghhb = $ghh >> $bd; $ghh &= $bdm;\r
+                $c += $r[$m] + $h * $g + ($ghh << $bd);\r
+                $r[$m] = $c & $bm;\r
+                $c = ($c >> $bs) + $gg * $hh + $ghhb;\r
+            }\r
+        }\r
+    }\r
+    $n = count($r);\r
+\r
+    if ($r[$n - 1]) return $r;\r
+    while ($n > 1 && $r[$n - 1] == 0) $n--;\r
+\r
+    return array_slice($r, 0, $n);\r
+}\r
+\r
+?>\r