Subversion Repositories php_utils

Rev

Rev 31 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 31 Rev 34
Line 1... Line 1...
1
<?php
1
<?php
2
 
2
 
3
/*
3
/*
4
 * OpenSSL php functions implemented using phpseclib
4
 * OpenSSL php functions implemented using phpseclib
5
 * Copyright 2022 Daniel Marschall, ViaThinkSoft
5
 * Copyright 2022 Daniel Marschall, ViaThinkSoft
6
 * Version 2022-04-10
6
 * Version 2022-07-17
7
 *
7
 *
8
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * Licensed under the Apache License, Version 2.0 (the "License");
9
 * you may not use this file except in compliance with the License.
9
 * you may not use this file except in compliance with the License.
10
 * You may obtain a copy of the License at
10
 * You may obtain a copy of the License at
11
 *
11
 *
Line 29... Line 29...
29
 
29
 
30
if (!function_exists('openssl_pkey_new') && class_exists('\\phpseclib3\\Crypt\\RSA')) {
30
if (!function_exists('openssl_pkey_new') && class_exists('\\phpseclib3\\Crypt\\RSA')) {
31
 
31
 
32
        define('OPENSSL_SUPPLEMENT', 1);
32
        define('OPENSSL_SUPPLEMENT', 1);
33
 
33
 
34
        $openssl_supplement_last_error = '';
34
        // ---------------------------------------------------------------------
35
 
35
 
-
 
36
        // https://www.php.net/manual/en/openssl.purpose-check.php
-
 
37
        if (!defined('X509_PURPOSE_SSL_CLIENT')) define('X509_PURPOSE_SSL_CLIENT', 1);
-
 
38
        if (!defined('X509_PURPOSE_SSL_SERVER')) define('X509_PURPOSE_SSL_SERVER', 2);
-
 
39
        if (!defined('X509_PURPOSE_NS_SSL_SERVER')) define('X509_PURPOSE_NS_SSL_SERVER', 3);
-
 
40
        if (!defined('X509_PURPOSE_SMIME_SIGN')) define('X509_PURPOSE_SMIME_SIGN', 4);
-
 
41
        if (!defined('X509_PURPOSE_SMIME_ENCRYPT')) define('X509_PURPOSE_SMIME_ENCRYPT', 5);
-
 
42
        if (!defined('X509_PURPOSE_CRL_SIGN')) define('X509_PURPOSE_CRL_SIGN', 6);
-
 
43
        if (!defined('X509_PURPOSE_ANY')) define('X509_PURPOSE_ANY', 7);
-
 
44
 
-
 
45
        // https://www.php.net/manual/en/openssl.padding.php
36
        if (!defined('OPENSSL_KEYTYPE_RSA')) define('OPENSSL_KEYTYPE_RSA', 0);
46
        if (!defined('OPENSSL_PKCS1_PADDING')) define('OPENSSL_PKCS1_PADDING', 1);
-
 
47
        if (!defined('OPENSSL_SSLV23_PADDING')) define('OPENSSL_SSLV23_PADDING', 2);
-
 
48
        if (!defined('OPENSSL_NO_PADDING')) define('OPENSSL_NO_PADDING', 3);
-
 
49
        if (!defined('OPENSSL_PKCS1_OAEP_PADDING')) define('OPENSSL_PKCS1_OAEP_PADDING', 4);
37
 
50
 
-
 
51
        // https://www.php.net/manual/en/openssl.key-types.php
-
 
52
        if (!defined('OPENSSL_KEYTYPE_RSA')) define('OPENSSL_KEYTYPE_RSA', 0);
-
 
53
        if (!defined('OPENSSL_KEYTYPE_DSA')) define('OPENSSL_KEYTYPE_DSA', 1);
-
 
54
        if (!defined('OPENSSL_KEYTYPE_DH')) define('OPENSSL_KEYTYPE_DH', 2);
-
 
55
        if (!defined('OPENSSL_KEYTYPE_EC')) define('OPENSSL_KEYTYPE_EC', 3);
-
 
56
 
-
 
57
        // https://www.php.net/manual/en/openssl.pkcs7.flags.php
-
 
58
        if (!defined('PKCS7_TEXT')) define('PKCS7_TEXT', 1);
-
 
59
        if (!defined('PKCS7_BINARY')) define('PKCS7_BINARY', 128);
-
 
60
        if (!defined('PKCS7_NOINTERN')) define('PKCS7_NOINTERN', 16);
-
 
61
        if (!defined('PKCS7_NOVERIFY')) define('PKCS7_NOVERIFY', 32);
-
 
62
        if (!defined('PKCS7_NOCHAIN')) define('PKCS7_NOCHAIN', 8);
-
 
63
        if (!defined('PKCS7_NOCERTS')) define('PKCS7_NOCERTS', 2);
-
 
64
        if (!defined('PKCS7_NOATTR')) define('PKCS7_NOATTR', 256);
-
 
65
        if (!defined('PKCS7_DETACHED')) define('PKCS7_DETACHED', 64);
-
 
66
        if (!defined('PKCS7_NOSIGS')) define('PKCS7_NOSIGS', 4);
-
 
67
 
-
 
68
        // https://www.php.net/manual/en/openssl.cms.flags.php
38
        if (!defined('OPENSSL_RAW_DATA')) define('OPENSSL_RAW_DATA', 1);
69
        if (!defined('OPENSSL_CMS_TEXT')) define('OPENSSL_CMS_TEXT', 1);
-
 
70
        if (!defined('OPENSSL_CMS_BINARY')) define('OPENSSL_CMS_BINARY', 128);
-
 
71
        if (!defined('OPENSSL_CMS_NOINTERN')) define('OPENSSL_CMS_NOINTERN', 16);
-
 
72
        if (!defined('OPENSSL_CMS_NOVERIFY')) define('OPENSSL_CMS_NOVERIFY', 32);
-
 
73
        if (!defined('OPENSSL_CMS_NOCERTS')) define('OPENSSL_CMS_NOCERTS', 2);
-
 
74
        if (!defined('OPENSSL_CMS_NOATTR')) define('OPENSSL_CMS_NOATTR', 256);
-
 
75
        if (!defined('OPENSSL_CMS_DETACHED')) define('OPENSSL_CMS_DETACHED', 64);
39
        if (!defined('OPENSSL_ZERO_PADDING')) define('OPENSSL_ZERO_PADDING', 2);
76
        if (!defined('OPENSSL_CMS_NOSIGS')) define('OPENSSL_CMS_NOSIGS', 12);
40
 
77
 
-
 
78
        // https://www.php.net/manual/en/openssl.signature-algos.php
-
 
79
        if (!defined('OPENSSL_ALGO_DSS1')) define('OPENSSL_ALGO_DSS1', 5); // Only defined when php/openssl compiled with MD2 support
41
        if (!defined('OPENSSL_ALGO_SHA1')) define('OPENSSL_ALGO_SHA1', 1);
80
        if (!defined('OPENSSL_ALGO_SHA1')) define('OPENSSL_ALGO_SHA1', 1);
42
        if (!defined('OPENSSL_ALGO_SHA224')) define('OPENSSL_ALGO_SHA224', 6);
81
        if (!defined('OPENSSL_ALGO_SHA224')) define('OPENSSL_ALGO_SHA224', 6);
43
        if (!defined('OPENSSL_ALGO_SHA256')) define('OPENSSL_ALGO_SHA256', 7);
82
        if (!defined('OPENSSL_ALGO_SHA256')) define('OPENSSL_ALGO_SHA256', 7);
44
        if (!defined('OPENSSL_ALGO_SHA384')) define('OPENSSL_ALGO_SHA384', 8);
83
        if (!defined('OPENSSL_ALGO_SHA384')) define('OPENSSL_ALGO_SHA384', 8);
45
        if (!defined('OPENSSL_ALGO_SHA512')) define('OPENSSL_ALGO_SHA512', 9);
84
        if (!defined('OPENSSL_ALGO_SHA512')) define('OPENSSL_ALGO_SHA512', 9);
46
        if (!defined('OPENSSL_ALGO_RMD160')) define('OPENSSL_ALGO_RMD160', 10);
85
        if (!defined('OPENSSL_ALGO_RMD160')) define('OPENSSL_ALGO_RMD160', 10);
47
        if (!defined('OPENSSL_ALGO_MD5')) define('OPENSSL_ALGO_MD5', 2);
86
        if (!defined('OPENSSL_ALGO_MD5')) define('OPENSSL_ALGO_MD5', 2);
48
        if (!defined('OPENSSL_ALGO_MD4')) define('OPENSSL_ALGO_MD4', 3);
87
        if (!defined('OPENSSL_ALGO_MD4')) define('OPENSSL_ALGO_MD4', 3);
-
 
88
        if (!defined('OPENSSL_ALGO_MD2')) define('OPENSSL_ALGO_MD2', 4); // Only defined when php/openssl compiled with MD2 support
-
 
89
 
-
 
90
        // https://www.php.net/manual/en/openssl.ciphers.php
-
 
91
        if (!defined('OPENSSL_CIPHER_RC2_40')) define('OPENSSL_CIPHER_RC2_40', 0);
-
 
92
        if (!defined('OPENSSL_CIPHER_RC2_128')) define('OPENSSL_CIPHER_RC2_128', 1);
-
 
93
        if (!defined('OPENSSL_CIPHER_RC2_64')) define('OPENSSL_CIPHER_RC2_64', 2);
-
 
94
        if (!defined('OPENSSL_CIPHER_DES')) define('OPENSSL_CIPHER_DES', 3);
-
 
95
        if (!defined('OPENSSL_CIPHER_3DES')) define('OPENSSL_CIPHER_3DES', 4);
-
 
96
        if (!defined('OPENSSL_CIPHER_AES_128_CBC')) define('OPENSSL_CIPHER_AES_128_CBC', 5);
-
 
97
        if (!defined('OPENSSL_CIPHER_AES_192_CBC')) define('OPENSSL_CIPHER_AES_192_CBC', 6);
-
 
98
        if (!defined('OPENSSL_CIPHER_AES_256_CBC')) define('OPENSSL_CIPHER_AES_256_CBC', 7);
-
 
99
 
-
 
100
        // https://www.php.net/manual/en/openssl.constversion.php
-
 
101
        // OPENSSL_VERSION_TEXT (string)
-
 
102
        // OPENSSL_VERSION_NUMBER (int)
-
 
103
 
-
 
104
        // https://www.php.net/manual/en/openssl.constsni.php
-
 
105
        // OPENSSL_TLSEXT_SERVER_NAME (string)
-
 
106
 
-
 
107
        // https://www.php.net/manual/en/openssl.constants.other.php
-
 
108
        if (!defined('OPENSSL_RAW_DATA')) define('OPENSSL_RAW_DATA', 1);
-
 
109
        if (!defined('OPENSSL_ZERO_PADDING')) define('OPENSSL_ZERO_PADDING', 2);
-
 
110
        if (!defined('OPENSSL_ENCODING_SMIME')) define('OPENSSL_ENCODING_SMIME', 1);
-
 
111
        if (!defined('OPENSSL_ENCODING_DER')) define('OPENSSL_ENCODING_DER', 0);
-
 
112
        if (!defined('OPENSSL_ENCODING_PEM')) define('OPENSSL_ENCODING_PEM', 2);
-
 
113
 
-
 
114
        // ---------------------------------------------------------------------
-
 
115
 
-
 
116
        $openssl_supplement_last_error = '';
49
 
117
 
50
        function openssl_pkey_new($pkey_config=null) {
118
        function openssl_pkey_new($pkey_config=null) {
51
                try {
119
                try {
52
                        $algo = $pkey_config && isset($pkey_config["private_key_type"]) ? $pkey_config["private_key_type"] : OPENSSL_KEYTYPE_RSA;
120
                        $algo = $pkey_config && isset($pkey_config["private_key_type"]) ? $pkey_config["private_key_type"] : OPENSSL_KEYTYPE_RSA;
53
                        $bits = $pkey_config && isset($pkey_config["private_key_bits"]) ? $pkey_config["private_key_bits"] : 2048;
121
                        $bits = $pkey_config && isset($pkey_config["private_key_bits"]) ? $pkey_config["private_key_bits"] : 2048;
Line 145... Line 213...
145
 
213
 
146
        function openssl_verify($msg, $signature, $public, $algorithm=OPENSSL_ALGO_SHA1) {
214
        function openssl_verify($msg, $signature, $public, $algorithm=OPENSSL_ALGO_SHA1) {
147
                try {
215
                try {
148
                        if ($algorithm == OPENSSL_ALGO_SHA1) $algorithm = 'SHA1';
216
                        if ($algorithm == OPENSSL_ALGO_SHA1) $algorithm = 'SHA1';
149
                        if ($algorithm == OPENSSL_ALGO_SHA224) $algorithm = 'SHA224';
217
                        if ($algorithm == OPENSSL_ALGO_SHA224) $algorithm = 'SHA224';
150
                        if ($algorithm == OPENSSL_ALGO_SHA256) $algorithm = 'SHA256)';
218
                        if ($algorithm == OPENSSL_ALGO_SHA256) $algorithm = 'SHA256';
151
                        if ($algorithm == OPENSSL_ALGO_SHA384) $algorithm = 'SHA384';
219
                        if ($algorithm == OPENSSL_ALGO_SHA384) $algorithm = 'SHA384';
152
                        if ($algorithm == OPENSSL_ALGO_SHA512) $algorithm = 'SHA512';
220
                        if ($algorithm == OPENSSL_ALGO_SHA512) $algorithm = 'SHA512';
153
                        if ($algorithm == OPENSSL_ALGO_RMD160) $algorithm = 'RMD160';
221
                        if ($algorithm == OPENSSL_ALGO_RMD160) $algorithm = 'RMD160';
154
                        if ($algorithm == OPENSSL_ALGO_MD5) $algorithm = 'MD5';
222
                        if ($algorithm == OPENSSL_ALGO_MD5) $algorithm = 'MD5';
155
                        if ($algorithm == OPENSSL_ALGO_MD4) $algorithm = 'MD4';
223
                        if ($algorithm == OPENSSL_ALGO_MD4) $algorithm = 'MD4';
Line 166... Line 234...
166
 
234
 
167
        function openssl_sign($msg, &$signature, $private, $algorithm=OPENSSL_ALGO_SHA1) {
235
        function openssl_sign($msg, &$signature, $private, $algorithm=OPENSSL_ALGO_SHA1) {
168
                try {
236
                try {
169
                        if ($algorithm == OPENSSL_ALGO_SHA1) $algorithm = 'SHA1';
237
                        if ($algorithm == OPENSSL_ALGO_SHA1) $algorithm = 'SHA1';
170
                        if ($algorithm == OPENSSL_ALGO_SHA224) $algorithm = 'SHA224';
238
                        if ($algorithm == OPENSSL_ALGO_SHA224) $algorithm = 'SHA224';
171
                        if ($algorithm == OPENSSL_ALGO_SHA256) $algorithm = 'SHA256)';
239
                        if ($algorithm == OPENSSL_ALGO_SHA256) $algorithm = 'SHA256';
172
                        if ($algorithm == OPENSSL_ALGO_SHA384) $algorithm = 'SHA384';
240
                        if ($algorithm == OPENSSL_ALGO_SHA384) $algorithm = 'SHA384';
173
                        if ($algorithm == OPENSSL_ALGO_SHA512) $algorithm = 'SHA512';
241
                        if ($algorithm == OPENSSL_ALGO_SHA512) $algorithm = 'SHA512';
174
                        if ($algorithm == OPENSSL_ALGO_RMD160) $algorithm = 'RMD160';
242
                        if ($algorithm == OPENSSL_ALGO_RMD160) $algorithm = 'RMD160';
175
                        if ($algorithm == OPENSSL_ALGO_MD5) $algorithm = 'MD5';
243
                        if ($algorithm == OPENSSL_ALGO_MD5) $algorithm = 'MD5';
176
                        if ($algorithm == OPENSSL_ALGO_MD4) $algorithm = 'MD4';
244
                        if ($algorithm == OPENSSL_ALGO_MD4) $algorithm = 'MD4';
Line 186... Line 254...
186
                }
254
                }
187
        }
255
        }
188
 
256
 
189
        function openssl_error_string() {
257
        function openssl_error_string() {
190
                global $openssl_supplement_last_error;
258
                global $openssl_supplement_last_error;
191
                return $openssl_supplement_last_error;
259
                $res = $openssl_supplement_last_error;
-
 
260
                $openssl_supplement_last_error = '';
-
 
261
                return $res;
192
        }
262
        }
193
 
263
 
194
        function openssl_random_pseudo_bytes($len) {
264
        function openssl_random_pseudo_bytes($len) {
195
                /*
265
                /*
196
                if (function_exists('openssl_random_pseudo_bytes')) {
266
                if (function_exists('openssl_random_pseudo_bytes')) {
Line 264... Line 334...
264
 
334
 
265
        function openssl_free_key($key) {
335
        function openssl_free_key($key) {
266
                // does nothing
336
                // does nothing
267
        }
337
        }
268
 
338
 
-
 
339
        function openssl_get_privatekey($key, $passphrase=null) {
-
 
340
                return openssl_pkey_get_private($key, $passphrase=null);
-
 
341
        }
-
 
342
 
269
        function openssl_pkey_get_private($key, $passphrase=null) {
343
        function openssl_pkey_get_private($key, $passphrase=null) {
270
                try {
344
                try {
271
                        if (substr($key,0,7) === 'file://') {
345
                        if (substr($key,0,7) === 'file://') {
272
                                if (!file_exists($file = substr($key, 7))) throw new Exception("file not found");
346
                                if (!file_exists($file = substr($key, 7))) throw new Exception("file not found");
273
                                $key = file_get_contents($file);
347
                                $key = file_get_contents($file);
Line 280... Line 354...
280
                        $openssl_supplement_last_error = $e->getMessage();
354
                        $openssl_supplement_last_error = $e->getMessage();
281
                        return false;
355
                        return false;
282
                }
356
                }
283
        }
357
        }
284
 
358
 
-
 
359
        function openssl_get_publickey($public_key) {
-
 
360
                return openssl_pkey_get_public($public_key);
-
 
361
        }
-
 
362
 
285
        function openssl_pkey_get_public($public_key) {
363
        function openssl_pkey_get_public($public_key) {
286
                try {
364
                try {
287
                        if (substr($public_key,0,7) === 'file://') {
365
                        if (substr($public_key,0,7) === 'file://') {
288
                                if (!file_exists($file = substr($public_key, 7))) throw new Exception("file not found");
366
                                if (!file_exists($file = substr($public_key, 7))) throw new Exception("file not found");
289
                                $public_key = file_get_contents($file);
367
                                $public_key = file_get_contents($file);
Line 295... Line 373...
295
                        $openssl_supplement_last_error = $e->getMessage();
373
                        $openssl_supplement_last_error = $e->getMessage();
296
                        return false;
374
                        return false;
297
                }
375
                }
298
        }
376
        }
299
 
377
 
-
 
378
        function openssl_pkey_free($key) {
-
 
379
        }
-
 
380
 
300
}
381
}