297 |
jpm |
1 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
2 |
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
|
3 |
<head>
|
|
|
4 |
<!-- template designed by Marco Von Ballmoos -->
|
|
|
5 |
<title>File Source for DiffieHellmanUtil.php</title>
|
|
|
6 |
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
|
|
|
7 |
<link rel="stylesheet" href="../media/stylesheet.css" />
|
|
|
8 |
</head>
|
|
|
9 |
<body>
|
|
|
10 |
<h1>Source for file DiffieHellmanUtil.php</h1>
|
|
|
11 |
<p>Documentation is available at <a href="../Framework/_utilitaires---DiffieHellmanUtil.php.html">DiffieHellmanUtil.php</a></p>
|
|
|
12 |
<div class="src-code">
|
|
|
13 |
<div class="src-code"><ol><li><div class="src-line"><a name="a1"></a><span class="src-php"><?php</span></div></li>
|
|
|
14 |
<li><div class="src-line"><a name="a2"></a> </div></li>
|
|
|
15 |
<li><div class="src-line"><a name="a3"></a><span class="src-doc">/**</span></div></li>
|
|
|
16 |
<li><div class="src-line"><a name="a4"></a><span class="src-doc"> * Classe utilitaire proposant des fonctions permettant la réalisation d'un</span></div></li>
|
|
|
17 |
<li><div class="src-line"><a name="a5"></a><span class="src-doc"> * échange de clé Diffie Hellman</span></div></li>
|
|
|
18 |
<li><div class="src-line"><a name="a6"></a><span class="src-doc"> * </span></div></li>
|
|
|
19 |
<li><div class="src-line"><a name="a7"></a><span class="src-doc"> * "En cryptographie, l'échange de clés Diffie-Hellman, du nom de ses auteurs</span></div></li>
|
|
|
20 |
<li><div class="src-line"><a name="a8"></a><span class="src-doc"> * Whitfield Diffie et Martin Hellman, est une méthode par laquelle deux</span></div></li>
|
|
|
21 |
<li><div class="src-line"><a name="a9"></a><span class="src-doc"> * personnes peuvent se mettre d'accord sur un nombre (qu'ils peuvent utiliser</span></div></li>
|
|
|
22 |
<li><div class="src-line"><a name="a10"></a><span class="src-doc"> * comme clé pour chiffrer la conversation suivante) sans qu'une troisième</span></div></li>
|
|
|
23 |
<li><div class="src-line"><a name="a11"></a><span class="src-doc"> * personne appelée Ève puisse découvrir le nombre, même en ayant écouté tous</span></div></li>
|
|
|
24 |
<li><div class="src-line"><a name="a12"></a><span class="src-doc"> * leurs échanges."</span></div></li>
|
|
|
25 |
<li><div class="src-line"><a name="a13"></a><span class="src-doc"> * </span></div></li>
|
|
|
26 |
<li><div class="src-line"><a name="a14"></a><span class="src-doc"> * Voir http://fr.wikipedia.org/wiki/%C3%89change_de_cl%C3%A9s_Diffie-Hellman</span></div></li>
|
|
|
27 |
<li><div class="src-line"><a name="a15"></a><span class="src-doc"> * </span></div></li>
|
|
|
28 |
<li><div class="src-line"><a name="a16"></a><span class="src-doc"> * */</span></div></li>
|
|
|
29 |
<li><div class="src-line"><a name="a16"></a> </div></li>
|
|
|
30 |
<li><div class="src-line"><a name="a17"></a><span class="src-key">class </span><a href="../Framework/DiffieHellmanUtil.html">DiffieHellmanUtil</a> <span class="src-sym">{</span></div></li>
|
|
|
31 |
<li><div class="src-line"><a name="a18"></a> </div></li>
|
|
|
32 |
<li><div class="src-line"><a name="a19"></a> <span class="src-comm">// Default Diffie-Hellman key generator (1024 bit) </span></div></li>
|
|
|
33 |
<li><div class="src-line"><a name="a20"></a> <span class="src-key">const </span><span class="src-id">DH_P </span>= <span class="src-str">'dcf93a0b883972ec0e19989ac5a2ce310e1d37717e8d9571bb7623731866e61ef75a2e27898b057f9891c2e27a639c3f29b60814581cd3b2ca3986d2683705577d45c2e7e52dc81c7a171876e5cea74b1448bfdfaf18828efd2519f14e45e3826634af1949e5b535cc829a483b8a76223e5d490a257f05bdff16f2fb22c583ab'</span><span class="src-sym">;</span></div></li>
|
|
|
34 |
<li><div class="src-line"><a name="a21"></a> </div></li>
|
|
|
35 |
<li><div class="src-line"><a name="a22"></a> <span class="src-comm">//Default Diffie-Hellman prime number (should be 2 or 5)</span></div></li>
|
|
|
36 |
<li><div class="src-line"><a name="a23"></a> <span class="src-key">const </span><span class="src-id">DH_G </span>= <span class="src-str">'02'</span><span class="src-sym">;</span></div></li>
|
|
|
37 |
<li><div class="src-line"><a name="a24"></a> </div></li>
|
|
|
38 |
<li><div class="src-line"><a name="a25"></a> </div></li>
|
|
|
39 |
<li><div class="src-line"><a name="a26"></a> </div></li>
|
|
|
40 |
<li><div class="src-line"><a name="a27"></a> </div></li>
|
|
|
41 |
<li><div class="src-line"><a name="a28"></a> <span class="src-doc">/**</span></div></li>
|
|
|
42 |
<li><div class="src-line"><a name="a29"></a><span class="src-doc"> * Performs the first step of a Diffie-Hellman key exchange by generating</span></div></li>
|
|
|
43 |
<li><div class="src-line"><a name="a30"></a><span class="src-doc"> * private and public DH values based on given prime number $p and</span></div></li>
|
|
|
44 |
<li><div class="src-line"><a name="a31"></a><span class="src-doc"> * generator $g. Both sides of key exchange MUST have the same prime number</span></div></li>
|
|
|
45 |
<li><div class="src-line"><a name="a32"></a><span class="src-doc"> * and generator. In this case they will able to create a random shared</span></div></li>
|
|
|
46 |
<li><div class="src-line"><a name="a33"></a><span class="src-doc"> * secret that is never send from one to the other.</span></div></li>
|
|
|
47 |
<li><div class="src-line"><a name="a34"></a><span class="src-doc"> *</span></div></li>
|
|
|
48 |
<li><div class="src-line"><a name="a35"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">string </span><span class="src-doc-var">$p </span><span class="src-doc">prime number in binary representation</span></div></li>
|
|
|
49 |
<li><div class="src-line"><a name="a36"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">string </span><span class="src-doc-var">$g </span><span class="src-doc">generator in binary representation</span></div></li>
|
|
|
50 |
<li><div class="src-line"><a name="a37"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">string </span><span class="src-doc-var">$priv_key </span><span class="src-doc">private key in binary representation</span></div></li>
|
|
|
51 |
<li><div class="src-line"><a name="a38"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@return </span><span class="src-doc-type">mixed </span></div></li>
|
|
|
52 |
<li><div class="src-line"><a name="a39"></a><span class="src-doc"> */</span></div></li>
|
|
|
53 |
<li><div class="src-line"><a name="a40"></a> <span class="src-key">public </span><span class="src-key">static </span><span class="src-key">function </span><a href="../Framework/DiffieHellmanUtil.html#methodcreateDhKey">createDhKey</a><span class="src-sym">(</span><span class="src-var">$p</span><span class="src-sym">, </span><span class="src-var">$g</span><span class="src-sym">, </span><span class="src-var">$priv_key </span>= <span class="src-id">null</span><span class="src-sym">)</span></div></li>
|
|
|
54 |
<li><div class="src-line"><a name="a41"></a> <span class="src-sym">{</span></div></li>
|
|
|
55 |
<li><div class="src-line"><a name="a42"></a> <span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/function_exists">function_exists</a><span class="src-sym">(</span><span class="src-str">'openssl_dh_compute_key'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
56 |
<li><div class="src-line"><a name="a43"></a> <span class="src-var">$dh_details </span>= <span class="src-key">array</span><span class="src-sym">(</span></div></li>
|
|
|
57 |
<li><div class="src-line"><a name="a44"></a> <span class="src-str">'p' </span>=> <span class="src-var">$p</span><span class="src-sym">,</span></div></li>
|
|
|
58 |
<li><div class="src-line"><a name="a45"></a> <span class="src-str">'g' </span>=> <span class="src-var">$g</span></div></li>
|
|
|
59 |
<li><div class="src-line"><a name="a46"></a> <span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
60 |
<li><div class="src-line"><a name="a47"></a> <span class="src-key">if </span><span class="src-sym">(</span><span class="src-var">$priv_key </span>!== <span class="src-id">null</span><span class="src-sym">) </span><span class="src-sym">{</span></div></li>
|
|
|
61 |
<li><div class="src-line"><a name="a48"></a> <span class="src-var">$dh_details</span><span class="src-sym">[</span><span class="src-str">'priv_key'</span><span class="src-sym">] </span>= <span class="src-var">$priv_key</span><span class="src-sym">;</span></div></li>
|
|
|
62 |
<li><div class="src-line"><a name="a49"></a> <span class="src-sym">}</span></div></li>
|
|
|
63 |
<li><div class="src-line"><a name="a50"></a> <span class="src-key">return </span><a href="http://www.php.net/openssl_pkey_new">openssl_pkey_new</a><span class="src-sym">(</span><span class="src-key">array</span><span class="src-sym">(</span><span class="src-str">'dh'</span>=><span class="src-var">$dh_details</span><span class="src-sym">))</span><span class="src-sym">;</span></div></li>
|
|
|
64 |
<li><div class="src-line"><a name="a51"></a> <span class="src-sym">} </span><span class="src-key">else </span><span class="src-sym">{</span></div></li>
|
|
|
65 |
<li><div class="src-line"><a name="a52"></a> <span class="src-var">$bn_p </span>= <span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">binToBigNum</span><span class="src-sym">(</span><span class="src-var">$p</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
66 |
<li><div class="src-line"><a name="a53"></a> <span class="src-var">$bn_g </span>= <span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">binToBigNum</span><span class="src-sym">(</span><span class="src-var">$g</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
67 |
<li><div class="src-line"><a name="a54"></a> <span class="src-key">if </span><span class="src-sym">(</span><span class="src-var">$priv_key </span>=== <span class="src-id">null</span><span class="src-sym">) </span><span class="src-sym">{</span></div></li>
|
|
|
68 |
<li><div class="src-line"><a name="a55"></a> <span class="src-var">$priv_key </span>= <span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">randomBytes</span><span class="src-sym">(</span><span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">strlen</span><span class="src-sym">(</span><span class="src-var">$p</span><span class="src-sym">))</span><span class="src-sym">;</span></div></li>
|
|
|
69 |
<li><div class="src-line"><a name="a56"></a> <span class="src-sym">}</span></div></li>
|
|
|
70 |
<li><div class="src-line"><a name="a57"></a> <span class="src-var">$bn_priv_key </span>= <span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">binToBigNum</span><span class="src-sym">(</span><span class="src-var">$priv_key</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
71 |
<li><div class="src-line"><a name="a58"></a> <span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/extension_loaded">extension_loaded</a><span class="src-sym">(</span><span class="src-str">'gmp'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
72 |
<li><div class="src-line"><a name="a59"></a> <span class="src-var">$bn_pub_key </span>= <span class="src-id">gmp_powm</span><span class="src-sym">(</span><span class="src-var">$bn_g</span><span class="src-sym">, </span><span class="src-var">$bn_priv_key</span><span class="src-sym">, </span><span class="src-var">$bn_p</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
73 |
<li><div class="src-line"><a name="a60"></a> <span class="src-sym">} </span><span class="src-key">else </span><span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/extension_loaded">extension_loaded</a><span class="src-sym">(</span><span class="src-str">'bcmath'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
74 |
<li><div class="src-line"><a name="a61"></a> <span class="src-var">$bn_pub_key </span>= <a href="http://www.php.net/bcpowmod">bcpowmod</a><span class="src-sym">(</span><span class="src-var">$bn_g</span><span class="src-sym">, </span><span class="src-var">$bn_priv_key</span><span class="src-sym">, </span><span class="src-var">$bn_p</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
75 |
<li><div class="src-line"><a name="a62"></a> <span class="src-sym">}</span></div></li>
|
|
|
76 |
<li><div class="src-line"><a name="a63"></a> <span class="src-var">$pub_key </span>= <span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">bigNumToBin</span><span class="src-sym">(</span><span class="src-var">$bn_pub_key</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
77 |
<li><div class="src-line"><a name="a64"></a> </div></li>
|
|
|
78 |
<li><div class="src-line"><a name="a65"></a> <span class="src-key">return </span><span class="src-key">array</span><span class="src-sym">(</span></div></li>
|
|
|
79 |
<li><div class="src-line"><a name="a66"></a> <span class="src-str">'p' </span>=> <span class="src-var">$bn_p</span><span class="src-sym">,</span></div></li>
|
|
|
80 |
<li><div class="src-line"><a name="a67"></a> <span class="src-str">'g' </span>=> <span class="src-var">$bn_g</span><span class="src-sym">,</span></div></li>
|
|
|
81 |
<li><div class="src-line"><a name="a68"></a> <span class="src-str">'priv_key' </span>=> <span class="src-var">$bn_priv_key</span><span class="src-sym">,</span></div></li>
|
|
|
82 |
<li><div class="src-line"><a name="a69"></a> <span class="src-str">'pub_key' </span>=> <span class="src-var">$bn_pub_key</span><span class="src-sym">,</span></div></li>
|
|
|
83 |
<li><div class="src-line"><a name="a70"></a> <span class="src-str">'details' </span>=> <span class="src-key">array</span><span class="src-sym">(</span></div></li>
|
|
|
84 |
<li><div class="src-line"><a name="a71"></a> <span class="src-str">'p' </span>=> <span class="src-var">$p</span><span class="src-sym">,</span></div></li>
|
|
|
85 |
<li><div class="src-line"><a name="a72"></a> <span class="src-str">'g' </span>=> <span class="src-var">$g</span><span class="src-sym">,</span></div></li>
|
|
|
86 |
<li><div class="src-line"><a name="a73"></a> <span class="src-str">'priv_key' </span>=> <span class="src-var">$priv_key</span><span class="src-sym">,</span></div></li>
|
|
|
87 |
<li><div class="src-line"><a name="a74"></a> <span class="src-str">'pub_key' </span>=> <span class="src-var">$pub_key</span><span class="src-sym">))</span><span class="src-sym">;</span></div></li>
|
|
|
88 |
<li><div class="src-line"><a name="a75"></a> <span class="src-sym">}</span></div></li>
|
|
|
89 |
<li><div class="src-line"><a name="a76"></a> <span class="src-sym">}</span></div></li>
|
|
|
90 |
<li><div class="src-line"><a name="a77"></a> </div></li>
|
|
|
91 |
<li><div class="src-line"><a name="a78"></a> <span class="src-doc">/**</span></div></li>
|
|
|
92 |
<li><div class="src-line"><a name="a79"></a><span class="src-doc"> * Returns an associative array with Diffie-Hellman key components in</span></div></li>
|
|
|
93 |
<li><div class="src-line"><a name="a80"></a><span class="src-doc"> * binary representation. The array includes original prime number 'p' and</span></div></li>
|
|
|
94 |
<li><div class="src-line"><a name="a81"></a><span class="src-doc"> * generator 'g', random private key 'priv_key' and corresponding public</span></div></li>
|
|
|
95 |
<li><div class="src-line"><a name="a82"></a><span class="src-doc"> * key 'pub_key'.</span></div></li>
|
|
|
96 |
<li><div class="src-line"><a name="a83"></a><span class="src-doc"> *</span></div></li>
|
|
|
97 |
<li><div class="src-line"><a name="a84"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">mixed </span><span class="src-doc-var">$dh </span><span class="src-doc">Diffie-Hellman key</span></div></li>
|
|
|
98 |
<li><div class="src-line"><a name="a85"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@return </span><span class="src-doc-type">array </span></div></li>
|
|
|
99 |
<li><div class="src-line"><a name="a86"></a><span class="src-doc"> */</span></div></li>
|
|
|
100 |
<li><div class="src-line"><a name="a87"></a> <span class="src-key">public </span><span class="src-key">static </span><span class="src-key">function </span><a href="../Framework/DiffieHellmanUtil.html#methodgetDhKeyDetails">getDhKeyDetails</a><span class="src-sym">(</span><span class="src-var">$dh</span><span class="src-sym">)</span></div></li>
|
|
|
101 |
<li><div class="src-line"><a name="a88"></a> <span class="src-sym">{</span></div></li>
|
|
|
102 |
<li><div class="src-line"><a name="a89"></a> <span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/function_exists">function_exists</a><span class="src-sym">(</span><span class="src-str">'openssl_dh_compute_key'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
103 |
<li><div class="src-line"><a name="a90"></a> <span class="src-var">$details </span>= <a href="http://www.php.net/openssl_pkey_get_details">openssl_pkey_get_details</a><span class="src-sym">(</span><span class="src-var">$dh</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
104 |
<li><div class="src-line"><a name="a91"></a> <span class="src-key">if </span><span class="src-sym">(</span>isset<span class="src-sym">(</span><span class="src-var">$details</span><span class="src-sym">[</span><span class="src-str">'dh'</span><span class="src-sym">]</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
105 |
<li><div class="src-line"><a name="a92"></a> <span class="src-key">return </span><span class="src-var">$details</span><span class="src-sym">[</span><span class="src-str">'dh'</span><span class="src-sym">]</span><span class="src-sym">;</span></div></li>
|
|
|
106 |
<li><div class="src-line"><a name="a93"></a> <span class="src-sym">}</span></div></li>
|
|
|
107 |
<li><div class="src-line"><a name="a94"></a> <span class="src-sym">} </span><span class="src-key">else </span><span class="src-sym">{</span></div></li>
|
|
|
108 |
<li><div class="src-line"><a name="a95"></a> <span class="src-key">return </span><span class="src-var">$dh</span><span class="src-sym">[</span><span class="src-str">'details'</span><span class="src-sym">]</span><span class="src-sym">;</span></div></li>
|
|
|
109 |
<li><div class="src-line"><a name="a96"></a> <span class="src-sym">}</span></div></li>
|
|
|
110 |
<li><div class="src-line"><a name="a97"></a> <span class="src-sym">}</span></div></li>
|
|
|
111 |
<li><div class="src-line"><a name="a98"></a> </div></li>
|
|
|
112 |
<li><div class="src-line"><a name="a99"></a> </div></li>
|
|
|
113 |
<li><div class="src-line"><a name="a100"></a> </div></li>
|
|
|
114 |
<li><div class="src-line"><a name="a101"></a><span class="src-comm">// Depuis OpenId.php, les fonctions de Diffie-Hellman</span></div></li>
|
|
|
115 |
<li><div class="src-line"><a name="a102"></a> <span class="src-comm">// TODO : voir si ça peut être externaliser pour être réutilisé ? => dans utilitaires</span></div></li>
|
|
|
116 |
<li><div class="src-line"><a name="a103"></a> <span class="src-doc">/**</span></div></li>
|
|
|
117 |
<li><div class="src-line"><a name="a104"></a><span class="src-doc"> * Computes the shared secret from the private DH value $dh and the other</span></div></li>
|
|
|
118 |
<li><div class="src-line"><a name="a105"></a><span class="src-doc"> * party's public value in $pub_key</span></div></li>
|
|
|
119 |
<li><div class="src-line"><a name="a106"></a><span class="src-doc"> *</span></div></li>
|
|
|
120 |
<li><div class="src-line"><a name="a107"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">string </span><span class="src-doc-var">$pub_key </span><span class="src-doc">other party's public value</span></div></li>
|
|
|
121 |
<li><div class="src-line"><a name="a108"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">mixed </span><span class="src-doc-var">$dh </span><span class="src-doc">Diffie-Hellman key</span></div></li>
|
|
|
122 |
<li><div class="src-line"><a name="a109"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@return </span><span class="src-doc-type">string </span></div></li>
|
|
|
123 |
<li><div class="src-line"><a name="a110"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@throws</span><span class="src-doc"> Zend_OpenId_Exception</span></div></li>
|
|
|
124 |
<li><div class="src-line"><a name="a111"></a><span class="src-doc"> */</span></div></li>
|
|
|
125 |
<li><div class="src-line"><a name="a112"></a> <span class="src-key">public </span><span class="src-key">function </span><a href="../Framework/DiffieHellmanUtil.html#methodcomputeDhSecret">computeDhSecret</a><span class="src-sym">(</span><span class="src-var">$pub_key</span><span class="src-sym">, </span><span class="src-var">$dh</span><span class="src-sym">)</span></div></li>
|
|
|
126 |
<li><div class="src-line"><a name="a113"></a> <span class="src-sym">{</span></div></li>
|
|
|
127 |
<li><div class="src-line"><a name="a114"></a> <span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/function_exists">function_exists</a><span class="src-sym">(</span><span class="src-str">'openssl_dh_compute_key'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
128 |
<li><div class="src-line"><a name="a115"></a> <span class="src-var">$ret </span>= <span class="src-id">openssl_dh_compute_key</span><span class="src-sym">(</span><span class="src-var">$pub_key</span><span class="src-sym">, </span><span class="src-var">$dh</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
129 |
<li><div class="src-line"><a name="a116"></a> <span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/ord">ord</a><span class="src-sym">(</span><span class="src-var">$ret</span><span class="src-sym">[</span><span class="src-num">0</span><span class="src-sym">]</span><span class="src-sym">) </span>> <span class="src-num">127</span><span class="src-sym">) </span><span class="src-sym">{</span></div></li>
|
|
|
130 |
<li><div class="src-line"><a name="a117"></a> <span class="src-var">$ret </span>= <span class="src-str">"\0" </span>. <span class="src-var">$ret</span><span class="src-sym">;</span></div></li>
|
|
|
131 |
<li><div class="src-line"><a name="a118"></a> <span class="src-sym">}</span></div></li>
|
|
|
132 |
<li><div class="src-line"><a name="a119"></a> <span class="src-key">return </span><span class="src-var">$ret</span><span class="src-sym">;</span></div></li>
|
|
|
133 |
<li><div class="src-line"><a name="a120"></a> <span class="src-sym">} </span><span class="src-key">else </span><span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/extension_loaded">extension_loaded</a><span class="src-sym">(</span><span class="src-str">'gmp'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
134 |
<li><div class="src-line"><a name="a121"></a> <span class="src-var">$bn_pub_key </span>= <span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">binToBigNum</span><span class="src-sym">(</span><span class="src-var">$pub_key</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
135 |
<li><div class="src-line"><a name="a122"></a> <span class="src-var">$bn_secret </span>= <span class="src-id">gmp_powm</span><span class="src-sym">(</span><span class="src-var">$bn_pub_key</span><span class="src-sym">, </span><span class="src-var">$dh</span><span class="src-sym">[</span><span class="src-str">'priv_key'</span><span class="src-sym">]</span><span class="src-sym">, </span><span class="src-var">$dh</span><span class="src-sym">[</span><span class="src-str">'p'</span><span class="src-sym">]</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
136 |
<li><div class="src-line"><a name="a123"></a> <span class="src-key">return </span><span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">bigNumToBin</span><span class="src-sym">(</span><span class="src-var">$bn_secret</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
137 |
<li><div class="src-line"><a name="a124"></a> <span class="src-sym">} </span><span class="src-key">else </span><span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/extension_loaded">extension_loaded</a><span class="src-sym">(</span><span class="src-str">'bcmath'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
138 |
<li><div class="src-line"><a name="a125"></a> <span class="src-var">$bn_pub_key </span>= <span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">binToBigNum</span><span class="src-sym">(</span><span class="src-var">$pub_key</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
139 |
<li><div class="src-line"><a name="a126"></a> <span class="src-var">$bn_secret </span>= <a href="http://www.php.net/bcpowmod">bcpowmod</a><span class="src-sym">(</span><span class="src-var">$bn_pub_key</span><span class="src-sym">, </span><span class="src-var">$dh</span><span class="src-sym">[</span><span class="src-str">'priv_key'</span><span class="src-sym">]</span><span class="src-sym">, </span><span class="src-var">$dh</span><span class="src-sym">[</span><span class="src-str">'p'</span><span class="src-sym">]</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
140 |
<li><div class="src-line"><a name="a127"></a> <span class="src-key">return </span><span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">bigNumToBin</span><span class="src-sym">(</span><span class="src-var">$bn_secret</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
141 |
<li><div class="src-line"><a name="a128"></a> <span class="src-sym">}</span></div></li>
|
|
|
142 |
<li><div class="src-line"><a name="a129"></a> <span class="src-comm">/*require_once "Zend/OpenId/Exception.php";</span></div></li>
|
|
|
143 |
<li><div class="src-line"><a name="a130"></a><span class="src-comm"> throw new Zend_OpenId_Exception(</span></div></li>
|
|
|
144 |
<li><div class="src-line"><a name="a131"></a><span class="src-comm"> 'The system doesn\'t have proper big integer extension',</span></div></li>
|
|
|
145 |
<li><div class="src-line"><a name="a132"></a><span class="src-comm"> Zend_OpenId_Exception::UNSUPPORTED_LONG_MATH);*/</span></div></li>
|
|
|
146 |
<li><div class="src-line"><a name="a133"></a> </div></li>
|
|
|
147 |
<li><div class="src-line"><a name="a134"></a> <a href="http://www.php.net/trigger_error">trigger_error</a><span class="src-sym">(</span><span class="src-str">'Le système ne gère pas les nombre de taille arbitraire'</span><span class="src-sym">, </span><span class="src-id">E_STRICT</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
148 |
<li><div class="src-line"><a name="a135"></a> <span class="src-sym">}</span></div></li>
|
|
|
149 |
<li><div class="src-line"><a name="a136"></a> </div></li>
|
|
|
150 |
<li><div class="src-line"><a name="a137"></a> <span class="src-doc">/**</span></div></li>
|
|
|
151 |
<li><div class="src-line"><a name="a138"></a><span class="src-doc"> * Takes an arbitrary precision integer and returns its shortest big-endian</span></div></li>
|
|
|
152 |
<li><div class="src-line"><a name="a139"></a><span class="src-doc"> * two's complement representation.</span></div></li>
|
|
|
153 |
<li><div class="src-line"><a name="a140"></a><span class="src-doc"> *</span></div></li>
|
|
|
154 |
<li><div class="src-line"><a name="a141"></a><span class="src-doc"> * Arbitrary precision integers MUST be encoded as big-endian signed two's</span></div></li>
|
|
|
155 |
<li><div class="src-line"><a name="a142"></a><span class="src-doc"> * complement binary strings. Henceforth, "btwoc" is a function that takes</span></div></li>
|
|
|
156 |
<li><div class="src-line"><a name="a143"></a><span class="src-doc"> * an arbitrary precision integer and returns its shortest big-endian two's</span></div></li>
|
|
|
157 |
<li><div class="src-line"><a name="a144"></a><span class="src-doc"> * complement representation. All integers that are used with</span></div></li>
|
|
|
158 |
<li><div class="src-line"><a name="a145"></a><span class="src-doc"> * Diffie-Hellman Key Exchange are positive. This means that the left-most</span></div></li>
|
|
|
159 |
<li><div class="src-line"><a name="a146"></a><span class="src-doc"> * bit of the two's complement representation MUST be zero. If it is not,</span></div></li>
|
|
|
160 |
<li><div class="src-line"><a name="a147"></a><span class="src-doc"> * implementations MUST add a zero byte at the front of the string.</span></div></li>
|
|
|
161 |
<li><div class="src-line"><a name="a148"></a><span class="src-doc"> *</span></div></li>
|
|
|
162 |
<li><div class="src-line"><a name="a149"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">string </span><span class="src-doc-var">$str </span><span class="src-doc">binary representation of arbitrary precision integer</span></div></li>
|
|
|
163 |
<li><div class="src-line"><a name="a150"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@return </span><span class="src-doc-type">string </span><span class="src-doc">big-endian signed representation</span></div></li>
|
|
|
164 |
<li><div class="src-line"><a name="a151"></a><span class="src-doc"> */</span></div></li>
|
|
|
165 |
<li><div class="src-line"><a name="a152"></a> <span class="src-key">public </span><span class="src-key">function </span><a href="../Framework/DiffieHellmanUtil.html#methodbtwoc">btwoc</a><span class="src-sym">(</span><span class="src-var">$str</span><span class="src-sym">)</span></div></li>
|
|
|
166 |
<li><div class="src-line"><a name="a153"></a> <span class="src-sym">{</span></div></li>
|
|
|
167 |
<li><div class="src-line"><a name="a154"></a> <span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/ord">ord</a><span class="src-sym">(</span><span class="src-var">$str</span><span class="src-sym">[</span><span class="src-num">0</span><span class="src-sym">]</span><span class="src-sym">) </span>> <span class="src-num">127</span><span class="src-sym">) </span><span class="src-sym">{</span></div></li>
|
|
|
168 |
<li><div class="src-line"><a name="a155"></a> <span class="src-key">return </span><span class="src-str">"\0" </span>. <span class="src-var">$str</span><span class="src-sym">;</span></div></li>
|
|
|
169 |
<li><div class="src-line"><a name="a156"></a> <span class="src-sym">}</span></div></li>
|
|
|
170 |
<li><div class="src-line"><a name="a157"></a> <span class="src-key">return </span><span class="src-var">$str</span><span class="src-sym">;</span></div></li>
|
|
|
171 |
<li><div class="src-line"><a name="a158"></a> <span class="src-sym">}</span></div></li>
|
|
|
172 |
<li><div class="src-line"><a name="a159"></a> </div></li>
|
|
|
173 |
<li><div class="src-line"><a name="a160"></a> </div></li>
|
|
|
174 |
<li><div class="src-line"><a name="a161"></a> </div></li>
|
|
|
175 |
<li><div class="src-line"><a name="a162"></a> <span class="src-doc">/**</span></div></li>
|
|
|
176 |
<li><div class="src-line"><a name="a163"></a><span class="src-doc"> * Produces string of random byte of given length.</span></div></li>
|
|
|
177 |
<li><div class="src-line"><a name="a164"></a><span class="src-doc"> *</span></div></li>
|
|
|
178 |
<li><div class="src-line"><a name="a165"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">integer </span><span class="src-doc-var">$len </span><span class="src-doc">length of requested string</span></div></li>
|
|
|
179 |
<li><div class="src-line"><a name="a166"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@return </span><span class="src-doc-type">string </span><span class="src-doc">RAW random binary string</span></div></li>
|
|
|
180 |
<li><div class="src-line"><a name="a167"></a><span class="src-doc"> */</span></div></li>
|
|
|
181 |
<li><div class="src-line"><a name="a168"></a> <span class="src-key">public </span><span class="src-key">function </span><a href="../Framework/DiffieHellmanUtil.html#methodrandomBytes">randomBytes</a><span class="src-sym">(</span><span class="src-var">$len</span><span class="src-sym">)</span></div></li>
|
|
|
182 |
<li><div class="src-line"><a name="a169"></a> <span class="src-sym">{</span></div></li>
|
|
|
183 |
<li><div class="src-line"><a name="a170"></a> <span class="src-var">$key </span>= <span class="src-str">''</span><span class="src-sym">;</span></div></li>
|
|
|
184 |
<li><div class="src-line"><a name="a171"></a> <span class="src-key">for</span><span class="src-sym">(</span><span class="src-var">$i</span>=<span class="src-num">0</span><span class="src-sym">; </span><span class="src-var">$i </span>< <span class="src-var">$len</span><span class="src-sym">; </span><span class="src-var">$i</span>++<span class="src-sym">) </span><span class="src-sym">{</span></div></li>
|
|
|
185 |
<li><div class="src-line"><a name="a172"></a> <span class="src-var">$key </span>.= <a href="http://www.php.net/chr">chr</a><span class="src-sym">(</span><a href="http://www.php.net/mt_rand">mt_rand</a><span class="src-sym">(</span><span class="src-num">0</span><span class="src-sym">, </span><span class="src-num">255</span><span class="src-sym">))</span><span class="src-sym">;</span></div></li>
|
|
|
186 |
<li><div class="src-line"><a name="a173"></a> <span class="src-sym">}</span></div></li>
|
|
|
187 |
<li><div class="src-line"><a name="a174"></a> <span class="src-key">return </span><span class="src-var">$key</span><span class="src-sym">;</span></div></li>
|
|
|
188 |
<li><div class="src-line"><a name="a175"></a> <span class="src-sym">}</span></div></li>
|
|
|
189 |
<li><div class="src-line"><a name="a176"></a> </div></li>
|
|
|
190 |
<li><div class="src-line"><a name="a177"></a> <span class="src-doc">/**</span></div></li>
|
|
|
191 |
<li><div class="src-line"><a name="a178"></a><span class="src-doc"> * Returns lenght of binary string in bytes</span></div></li>
|
|
|
192 |
<li><div class="src-line"><a name="a179"></a><span class="src-doc"> *</span></div></li>
|
|
|
193 |
<li><div class="src-line"><a name="a180"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">string </span><span class="src-doc-var">$str </span></div></li>
|
|
|
194 |
<li><div class="src-line"><a name="a181"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@return </span><span class="src-doc-type">int </span><span class="src-doc">the string lenght</span></div></li>
|
|
|
195 |
<li><div class="src-line"><a name="a182"></a><span class="src-doc"> */</span></div></li>
|
|
|
196 |
<li><div class="src-line"><a name="a183"></a> <span class="src-key">static </span><span class="src-key">public </span><span class="src-key">function </span><a href="../Framework/DiffieHellmanUtil.html#methodstrlen">strlen</a><span class="src-sym">(</span><span class="src-var">$str</span><span class="src-sym">)</span></div></li>
|
|
|
197 |
<li><div class="src-line"><a name="a184"></a> <span class="src-sym">{</span></div></li>
|
|
|
198 |
<li><div class="src-line"><a name="a185"></a> <span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/extension_loaded">extension_loaded</a><span class="src-sym">(</span><span class="src-str">'mbstring'</span><span class="src-sym">) </span>&&</div></li>
|
|
|
199 |
<li><div class="src-line"><a name="a186"></a> <span class="src-sym">((</span>(int)<a href="http://www.php.net/ini_get">ini_get</a><span class="src-sym">(</span><span class="src-str">'mbstring.func_overload'</span><span class="src-sym">)) </span><span class="src-sym">& </span><span class="src-num">2</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
200 |
<li><div class="src-line"><a name="a187"></a> <span class="src-key">return </span><a href="http://www.php.net/mb_strlen">mb_strlen</a><span class="src-sym">(</span><span class="src-var">$str</span><span class="src-sym">, </span><span class="src-str">'latin1'</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
201 |
<li><div class="src-line"><a name="a188"></a> <span class="src-sym">} </span><span class="src-key">else </span><span class="src-sym">{</span></div></li>
|
|
|
202 |
<li><div class="src-line"><a name="a189"></a> <span class="src-key">return </span><a href="../Framework/DiffieHellmanUtil.html#methodstrlen">strlen</a><span class="src-sym">(</span><span class="src-var">$str</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
203 |
<li><div class="src-line"><a name="a190"></a> <span class="src-sym">}</span></div></li>
|
|
|
204 |
<li><div class="src-line"><a name="a191"></a> <span class="src-sym">}</span></div></li>
|
|
|
205 |
<li><div class="src-line"><a name="a192"></a> </div></li>
|
|
|
206 |
<li><div class="src-line"><a name="a193"></a> </div></li>
|
|
|
207 |
<li><div class="src-line"><a name="a194"></a> <span class="src-doc">/**</span></div></li>
|
|
|
208 |
<li><div class="src-line"><a name="a195"></a><span class="src-doc"> * Converts binary representation into ext/gmp or ext/bcmath big integer</span></div></li>
|
|
|
209 |
<li><div class="src-line"><a name="a196"></a><span class="src-doc"> * representation.</span></div></li>
|
|
|
210 |
<li><div class="src-line"><a name="a197"></a><span class="src-doc"> *</span></div></li>
|
|
|
211 |
<li><div class="src-line"><a name="a198"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@param </span><span class="src-doc-type">string </span><span class="src-doc-var">$bin </span><span class="src-doc">binary representation of big number</span></div></li>
|
|
|
212 |
<li><div class="src-line"><a name="a199"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@return </span><span class="src-doc-type">mixed </span></div></li>
|
|
|
213 |
<li><div class="src-line"><a name="a200"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@throws</span><span class="src-doc"> Zend_OpenId_Exception</span></div></li>
|
|
|
214 |
<li><div class="src-line"><a name="a201"></a><span class="src-doc"> */</span></div></li>
|
|
|
215 |
<li><div class="src-line"><a name="a202"></a> <span class="src-key">protected </span><span class="src-key">function </span><a href="../Framework/DiffieHellmanUtil.html#methodbinToBigNum">binToBigNum</a><span class="src-sym">(</span><span class="src-var">$bin</span><span class="src-sym">)</span></div></li>
|
|
|
216 |
<li><div class="src-line"><a name="a203"></a> <span class="src-sym">{</span></div></li>
|
|
|
217 |
<li><div class="src-line"><a name="a204"></a> <span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/extension_loaded">extension_loaded</a><span class="src-sym">(</span><span class="src-str">'gmp'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
218 |
<li><div class="src-line"><a name="a205"></a> <span class="src-key">return </span><span class="src-id">gmp_init</span><span class="src-sym">(</span><a href="http://www.php.net/bin2hex">bin2hex</a><span class="src-sym">(</span><span class="src-var">$bin</span><span class="src-sym">)</span><span class="src-sym">, </span><span class="src-num">16</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
219 |
<li><div class="src-line"><a name="a206"></a> <span class="src-sym">} </span><span class="src-key">else </span><span class="src-key">if </span><span class="src-sym">(</span><a href="http://www.php.net/extension_loaded">extension_loaded</a><span class="src-sym">(</span><span class="src-str">'bcmath'</span><span class="src-sym">)) </span><span class="src-sym">{</span></div></li>
|
|
|
220 |
<li><div class="src-line"><a name="a207"></a> <span class="src-var">$bn </span>= <span class="src-num">0</span><span class="src-sym">;</span></div></li>
|
|
|
221 |
<li><div class="src-line"><a name="a208"></a> <span class="src-var">$len </span>= <span class="src-id">self</span><span class="src-sym">::</span><span class="src-id">strlen</span><span class="src-sym">(</span><span class="src-var">$bin</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
222 |
<li><div class="src-line"><a name="a209"></a> <span class="src-key">for </span><span class="src-sym">(</span><span class="src-var">$i </span>= <span class="src-num">0</span><span class="src-sym">; </span><span class="src-var">$i </span>< <span class="src-var">$len</span><span class="src-sym">; </span><span class="src-var">$i</span>++<span class="src-sym">) </span><span class="src-sym">{</span></div></li>
|
|
|
223 |
<li><div class="src-line"><a name="a210"></a> <span class="src-var">$bn </span>= <a href="http://www.php.net/bcmul">bcmul</a><span class="src-sym">(</span><span class="src-var">$bn</span><span class="src-sym">, </span><span class="src-num">256</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
224 |
<li><div class="src-line"><a name="a211"></a> <span class="src-var">$bn </span>= <a href="http://www.php.net/bcadd">bcadd</a><span class="src-sym">(</span><span class="src-var">$bn</span><span class="src-sym">, </span><a href="http://www.php.net/ord">ord</a><span class="src-sym">(</span><span class="src-var">$bin</span><span class="src-sym">[</span><span class="src-var">$i</span><span class="src-sym">]</span><span class="src-sym">))</span><span class="src-sym">;</span></div></li>
|
|
|
225 |
<li><div class="src-line"><a name="a212"></a> <span class="src-sym">}</span></div></li>
|
|
|
226 |
<li><div class="src-line"><a name="a213"></a> <span class="src-key">return </span><span class="src-var">$bn</span><span class="src-sym">;</span></div></li>
|
|
|
227 |
<li><div class="src-line"><a name="a214"></a> <span class="src-sym">}</span></div></li>
|
|
|
228 |
<li><div class="src-line"><a name="a215"></a> <span class="src-comm">/*require_once "Zend/OpenId/Exception.php";</span></div></li>
|
|
|
229 |
<li><div class="src-line"><a name="a216"></a><span class="src-comm"> throw new Zend_OpenId_Exception(</span></div></li>
|
|
|
230 |
<li><div class="src-line"><a name="a217"></a><span class="src-comm"> 'The system doesn\'t have proper big integer extension',</span></div></li>
|
|
|
231 |
<li><div class="src-line"><a name="a218"></a><span class="src-comm"> Zend_OpenId_Exception::UNSUPPORTED_LONG_MATH);*/</span></div></li>
|
|
|
232 |
<li><div class="src-line"><a name="a219"></a> </div></li>
|
|
|
233 |
<li><div class="src-line"><a name="a220"></a> <a href="http://www.php.net/trigger_error">trigger_error</a><span class="src-sym">(</span><span class="src-str">'Le système ne gère pas les nombre de taille arbitraire'</span><span class="src-sym">, </span><span class="src-id">E_STRICT</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
|
|
|
234 |
<li><div class="src-line"><a name="a221"></a> <span class="src-sym">}</span></div></li>
|
|
|
235 |
<li><div class="src-line"><a name="a222"></a> </div></li>
|
|
|
236 |
<li><div class="src-line"><a name="a223"></a><span class="src-sym">}</span></div></li>
|
|
|
237 |
<li><div class="src-line"><a name="a224"></a><span class="src-php">?></span></div></li>
|
|
|
238 |
</ol></div>
|
|
|
239 |
</div>
|
|
|
240 |
<p class="notes" id="credit">
|
302 |
jpm |
241 |
Documentation generated on Tue, 18 Jan 2011 15:30:48 +0100 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
|
297 |
jpm |
242 |
</p>
|
|
|
243 |
</body>
|
|
|
244 |
</html>
|