diff options
| author | William Ahern <william@25thandClement.com> | 2016-01-07 23:51:25 +0800 |
|---|---|---|
| committer | William Ahern <william@25thandClement.com> | 2016-01-07 23:51:25 +0800 |
| commit | 2180c60e159edc097fa9197a717dc66141e11eb4 (patch) | |
| tree | ebe721eb7e658a029ce13944de4411800ebd058a /src | |
| parent | 4cb69e49c4f11046ba05863f326a35538c135a29 (diff) | |
| download | luaossl-2180c60e159edc097fa9197a717dc66141e11eb4.tar.gz luaossl-2180c60e159edc097fa9197a717dc66141e11eb4.tar.bz2 luaossl-2180c60e159edc097fa9197a717dc66141e11eb4.zip | |
permit direct indexing of EVP_KEY as alternative to getParameters/setParameters
Diffstat (limited to 'src')
| -rw-r--r-- | src/openssl.c | 574 |
1 files changed, 356 insertions, 218 deletions
diff --git a/src/openssl.c b/src/openssl.c index 78eef68..7f368ee 100644 --- a/src/openssl.c +++ b/src/openssl.c | |||
| @@ -303,36 +303,7 @@ static int interpose(lua_State *L, const char *mt) { | |||
| 303 | return 1; /* return old method */ | 303 | return 1; /* return old method */ |
| 304 | } /* interpose() */ | 304 | } /* interpose() */ |
| 305 | 305 | ||
| 306 | 306 | static int auxL_checkoption(lua_State *, int, const char *, const char *const *, _Bool); | |
| 307 | static void addclass(lua_State *L, const char *name, const luaL_Reg *methods, const luaL_Reg *metamethods) { | ||
| 308 | if (luaL_newmetatable(L, name)) { | ||
| 309 | luaL_setfuncs(L, metamethods, 0); | ||
| 310 | lua_newtable(L); | ||
| 311 | luaL_setfuncs(L, methods, 0); | ||
| 312 | lua_setfield(L, -2, "__index"); | ||
| 313 | lua_pop(L, 1); | ||
| 314 | } | ||
| 315 | } /* addclass() */ | ||
| 316 | |||
| 317 | |||
| 318 | static int badoption(lua_State *L, int index, const char *opt) { | ||
| 319 | opt = (opt)? opt : luaL_checkstring(L, index); | ||
| 320 | |||
| 321 | return luaL_argerror(L, index, lua_pushfstring(L, "invalid option %s", opt)); | ||
| 322 | } /* badoption() */ | ||
| 323 | |||
| 324 | static int checkoption(lua_State *L, int index, const char *def, const char *const opts[]) { | ||
| 325 | const char *opt = (def)? luaL_optstring(L, index, def) : luaL_checkstring(L, index); | ||
| 326 | int i; | ||
| 327 | |||
| 328 | for (i = 0; opts[i]; i++) { | ||
| 329 | if (strieq(opts[i], opt)) | ||
| 330 | return i; | ||
| 331 | } | ||
| 332 | |||
| 333 | return badoption(L, index, opt); | ||
| 334 | } /* checkoption() */ | ||
| 335 | |||
| 336 | 307 | ||
| 337 | #define X509_ANY 0x01 | 308 | #define X509_ANY 0x01 |
| 338 | #define X509_PEM 0x02 | 309 | #define X509_PEM 0x02 |
| @@ -344,7 +315,7 @@ static int optencoding(lua_State *L, int index, const char *def, int allow) { | |||
| 344 | static const char *const opts[] = { "*", "pem", "der", "pretty", NULL }; | 315 | static const char *const opts[] = { "*", "pem", "der", "pretty", NULL }; |
| 345 | int type = 0; | 316 | int type = 0; |
| 346 | 317 | ||
| 347 | switch (checkoption(L, index, def, opts)) { | 318 | switch (auxL_checkoption(L, index, def, opts, 1)) { |
| 348 | case 0: | 319 | case 0: |
| 349 | type = X509_ANY; | 320 | type = X509_ANY; |
| 350 | break; | 321 | break; |
| @@ -658,6 +629,27 @@ NOTUSED static auxtype_t auxL_getref(lua_State *L, auxref_t ref) { | |||
| 658 | return lua_type(L, -1); | 629 | return lua_type(L, -1); |
| 659 | } /* auxL_getref() */ | 630 | } /* auxL_getref() */ |
| 660 | 631 | ||
| 632 | static int auxL_testoption(lua_State *L, int index, const char *def, const char *const *optlist, _Bool nocase) { | ||
| 633 | const char *optname = (def)? luaL_optstring(L, index, def) : luaL_checkstring(L, index); | ||
| 634 | int (*optcmp)() = (nocase)? &strcasecmp : &strcmp; | ||
| 635 | |||
| 636 | for (int i = 0; optlist[i]; i++) { | ||
| 637 | if (0 == optcmp(optlist[i], optname)) | ||
| 638 | return i; | ||
| 639 | } | ||
| 640 | |||
| 641 | return -1; | ||
| 642 | } /* auxL_testoption() */ | ||
| 643 | |||
| 644 | static int auxL_checkoption(lua_State *L, int index, const char *def, const char *const *optlist, _Bool nocase) { | ||
| 645 | int i; | ||
| 646 | |||
| 647 | if ((i = auxL_testoption(L, index, def, optlist, nocase)) >= 0) | ||
| 648 | return i; | ||
| 649 | |||
| 650 | return luaL_argerror(L, index, lua_pushfstring(L, "invalid option '%s'", luaL_optstring(L, index, def))); | ||
| 651 | } /* auxL_checkoption() */ | ||
| 652 | |||
| 661 | /* | 653 | /* |
| 662 | * Lua 5.3 distinguishes integers and numbers, and by default uses 64-bit | 654 | * Lua 5.3 distinguishes integers and numbers, and by default uses 64-bit |
| 663 | * integers. The following routines try to preserve this distinction and | 655 | * integers. The following routines try to preserve this distinction and |
| @@ -753,6 +745,13 @@ static auxL_Unsigned (auxL_optunsigned)(lua_State *L, int index, auxL_Unsigned d | |||
| 753 | return (lua_isnoneornil(L, index))? def : auxL_checkunsigned(L, index, min, max); | 745 | return (lua_isnoneornil(L, index))? def : auxL_checkunsigned(L, index, min, max); |
| 754 | } /* auxL_optunsigned() */ | 746 | } /* auxL_optunsigned() */ |
| 755 | 747 | ||
| 748 | static int auxL_size2int(lua_State *L, size_t n) { | ||
| 749 | if (n > INT_MAX) | ||
| 750 | luaL_error(L, "integer value out of range (%zu > INT_MAX)", n); | ||
| 751 | |||
| 752 | return (int)n; | ||
| 753 | } /* auxL_size2int() */ | ||
| 754 | |||
| 756 | typedef struct { | 755 | typedef struct { |
| 757 | const char *name; | 756 | const char *name; |
| 758 | auxL_Integer value; | 757 | auxL_Integer value; |
| @@ -765,6 +764,105 @@ static void auxL_setintegers(lua_State *L, const auxL_IntegerReg *l) { | |||
| 765 | } | 764 | } |
| 766 | } /* auxL_setintegers() */ | 765 | } /* auxL_setintegers() */ |
| 767 | 766 | ||
| 767 | #define AUXL_REG_NULL (&(auxL_Reg[]){ 0 }) | ||
| 768 | |||
| 769 | typedef struct { | ||
| 770 | const char *name; | ||
| 771 | lua_CFunction func; | ||
| 772 | unsigned nups; /* in addition to nups specified to auxL_setfuncs */ | ||
| 773 | } auxL_Reg; | ||
| 774 | |||
| 775 | static inline size_t auxL_liblen(const auxL_Reg *l) { | ||
| 776 | size_t n = 0; | ||
| 777 | |||
| 778 | while ((l++)->name) | ||
| 779 | n++; | ||
| 780 | |||
| 781 | return n; | ||
| 782 | } /* auxL_liblen() */ | ||
| 783 | |||
| 784 | #define auxL_newlibtable(L, l) \ | ||
| 785 | lua_createtable((L), 0, countof((l)) - 1) | ||
| 786 | |||
| 787 | #define auxL_newlib(L, l, nups) \ | ||
| 788 | (auxL_newlibtable((L), (l)), auxL_setfuncs((L), (l), (nups))) | ||
| 789 | |||
| 790 | static void auxL_setfuncs(lua_State *L, const auxL_Reg *l, int nups) { | ||
| 791 | for (; l->name; l++) { | ||
| 792 | /* copy shared upvalues */ | ||
| 793 | luaL_checkstack(L, nups, "too many upvalues"); | ||
| 794 | for (int i = 0; i < nups; i++) | ||
| 795 | lua_pushvalue(L, -nups); | ||
| 796 | |||
| 797 | /* nil-fill local upvalues */ | ||
| 798 | luaL_checkstack(L, l->nups, "too many upvalues"); | ||
| 799 | lua_settop(L, lua_gettop(L) + l->nups); | ||
| 800 | |||
| 801 | /* set closure */ | ||
| 802 | luaL_checkstack(L, 1, "too many upvalues"); | ||
| 803 | lua_pushcclosure(L, l->func, nups + l->nups); | ||
| 804 | lua_setfield(L, -(nups + 2), l->name); | ||
| 805 | } | ||
| 806 | |||
| 807 | lua_pop(L, nups); | ||
| 808 | |||
| 809 | return; | ||
| 810 | } /* auxL_setfuncs() */ | ||
| 811 | |||
| 812 | static void auxL_clear(lua_State *L, int tindex) { | ||
| 813 | tindex = lua_absindex(L, tindex); | ||
| 814 | |||
| 815 | lua_pushnil(L); | ||
| 816 | while (lua_next(L, tindex)) { | ||
| 817 | lua_pop(L, 1); | ||
| 818 | lua_pushvalue(L, -1); | ||
| 819 | lua_pushnil(L); | ||
| 820 | lua_rawset(L, tindex); | ||
| 821 | } | ||
| 822 | } /* auxL_clear() */ | ||
| 823 | |||
| 824 | static _Bool auxL_newmetatable(lua_State *L, const char *name, _Bool reset) { | ||
| 825 | if (luaL_newmetatable(L, name)) | ||
| 826 | return 1; | ||
| 827 | if (!reset) | ||
| 828 | return 0; | ||
| 829 | |||
| 830 | /* | ||
| 831 | * NB: Keep existing table as it may be cached--e.g. in | ||
| 832 | * another module that isn't being reloaded. But scrub it | ||
| 833 | * clean so function interposition--which will presumably | ||
| 834 | * run again if the C module is being reloaded--doesn't | ||
| 835 | * result in loops. | ||
| 836 | */ | ||
| 837 | auxL_clear(L, -1); | ||
| 838 | lua_pushnil(L); | ||
| 839 | lua_setmetatable(L, -2); | ||
| 840 | #if LUA_VERSION_NUM >= 502 | ||
| 841 | lua_pushnil(L); | ||
| 842 | lua_setuservalue(L, -2); | ||
| 843 | #endif | ||
| 844 | |||
| 845 | return 0; | ||
| 846 | } /* auxL_newmetatable() */ | ||
| 847 | |||
| 848 | static _Bool auxL_newclass(lua_State *L, const char *name, const auxL_Reg *methods, const auxL_Reg *metamethods, _Bool reset) { | ||
| 849 | _Bool fresh = auxL_newmetatable(L, name, reset); | ||
| 850 | int n; | ||
| 851 | |||
| 852 | auxL_setfuncs(L, metamethods, 0); | ||
| 853 | |||
| 854 | if ((n = auxL_liblen(methods))) { | ||
| 855 | lua_createtable(L, 0, auxL_size2int(L, n)); | ||
| 856 | auxL_setfuncs(L, methods, 0); | ||
| 857 | lua_setfield(L, -2, "__index"); | ||
| 858 | } | ||
| 859 | |||
| 860 | return fresh; | ||
| 861 | } /* auxL_newclass() */ | ||
| 862 | |||
| 863 | #define auxL_addclass(L, ...) \ | ||
| 864 | (auxL_newclass((L), __VA_ARGS__), lua_pop((L), 1)) | ||
| 865 | |||
| 768 | #define auxL_EDYLD -2 | 866 | #define auxL_EDYLD -2 |
| 769 | #define auxL_EOPENSSL -1 | 867 | #define auxL_EOPENSSL -1 |
| 770 | 868 | ||
| @@ -1368,7 +1466,7 @@ static int ossl_version(lua_State *L) { | |||
| 1368 | return 1; | 1466 | return 1; |
| 1369 | } /* ossl_version() */ | 1467 | } /* ossl_version() */ |
| 1370 | 1468 | ||
| 1371 | static const luaL_Reg ossl_globals[] = { | 1469 | static const auxL_Reg ossl_globals[] = { |
| 1372 | { "version", &ossl_version }, | 1470 | { "version", &ossl_version }, |
| 1373 | { NULL, NULL }, | 1471 | { NULL, NULL }, |
| 1374 | }; | 1472 | }; |
| @@ -1540,7 +1638,7 @@ static const auxL_IntegerReg ssleay_version[] = { | |||
| 1540 | int luaopen__openssl(lua_State *L) { | 1638 | int luaopen__openssl(lua_State *L) { |
| 1541 | size_t i; | 1639 | size_t i; |
| 1542 | 1640 | ||
| 1543 | luaL_newlib(L, ossl_globals); | 1641 | auxL_newlib(L, ossl_globals, 0); |
| 1544 | 1642 | ||
| 1545 | for (i = 0; i < countof(opensslconf_no); i++) { | 1643 | for (i = 0; i < countof(opensslconf_no); i++) { |
| 1546 | if (*opensslconf_no[i]) { | 1644 | if (*opensslconf_no[i]) { |
| @@ -2097,7 +2195,7 @@ sslerr: | |||
| 2097 | } /* bn_tohex() */ | 2195 | } /* bn_tohex() */ |
| 2098 | 2196 | ||
| 2099 | 2197 | ||
| 2100 | static const luaL_Reg bn_methods[] = { | 2198 | static const auxL_Reg bn_methods[] = { |
| 2101 | { "add", &bn__add }, | 2199 | { "add", &bn__add }, |
| 2102 | { "sub", &bn__sub }, | 2200 | { "sub", &bn__sub }, |
| 2103 | { "mul", &bn__mul }, | 2201 | { "mul", &bn__mul }, |
| @@ -2116,7 +2214,7 @@ static const luaL_Reg bn_methods[] = { | |||
| 2116 | { NULL, NULL }, | 2214 | { NULL, NULL }, |
| 2117 | }; | 2215 | }; |
| 2118 | 2216 | ||
| 2119 | static const luaL_Reg bn_metatable[] = { | 2217 | static const auxL_Reg bn_metatable[] = { |
| 2120 | { "__add", &bn__add }, | 2218 | { "__add", &bn__add }, |
| 2121 | { "__sub", &bn__sub }, | 2219 | { "__sub", &bn__sub }, |
| 2122 | { "__mul", &bn__mul }, | 2220 | { "__mul", &bn__mul }, |
| @@ -2136,7 +2234,7 @@ static const luaL_Reg bn_metatable[] = { | |||
| 2136 | }; | 2234 | }; |
| 2137 | 2235 | ||
| 2138 | 2236 | ||
| 2139 | static const luaL_Reg bn_globals[] = { | 2237 | static const auxL_Reg bn_globals[] = { |
| 2140 | { "new", &bn_new }, | 2238 | { "new", &bn_new }, |
| 2141 | { "interpose", &bn_interpose }, | 2239 | { "interpose", &bn_interpose }, |
| 2142 | { "generatePrime", &bn_generatePrime }, | 2240 | { "generatePrime", &bn_generatePrime }, |
| @@ -2146,7 +2244,7 @@ static const luaL_Reg bn_globals[] = { | |||
| 2146 | int luaopen__openssl_bignum(lua_State *L) { | 2244 | int luaopen__openssl_bignum(lua_State *L) { |
| 2147 | initall(L); | 2245 | initall(L); |
| 2148 | 2246 | ||
| 2149 | luaL_newlib(L, bn_globals); | 2247 | auxL_newlib(L, bn_globals, 0); |
| 2150 | 2248 | ||
| 2151 | return 1; | 2249 | return 1; |
| 2152 | } /* luaopen__openssl_bignum() */ | 2250 | } /* luaopen__openssl_bignum() */ |
| @@ -2599,7 +2697,7 @@ static int pk_toPEM(lua_State *L) { | |||
| 2599 | NULL, | 2697 | NULL, |
| 2600 | }; | 2698 | }; |
| 2601 | 2699 | ||
| 2602 | switch (checkoption(L, i, NULL, opts)) { | 2700 | switch (auxL_checkoption(L, i, NULL, opts, 1)) { |
| 2603 | case 0: case 1: /* public, PublicKey */ | 2701 | case 0: case 1: /* public, PublicKey */ |
| 2604 | if (!PEM_write_bio_PUBKEY(bio, key)) | 2702 | if (!PEM_write_bio_PUBKEY(bio, key)) |
| 2605 | return auxL_error(L, auxL_EOPENSSL, "pkey:__tostring"); | 2703 | return auxL_error(L, auxL_EOPENSSL, "pkey:__tostring"); |
| @@ -2728,26 +2826,50 @@ static const char *const pk_dsa_optlist[] = PK_DSA_OPTLIST; | |||
| 2728 | static const char *const pk_dh_optlist[] = PK_DH_OPTLIST; | 2826 | static const char *const pk_dh_optlist[] = PK_DH_OPTLIST; |
| 2729 | static const char *const pk_ec_optlist[] = PK_EC_OPTLIST; | 2827 | static const char *const pk_ec_optlist[] = PK_EC_OPTLIST; |
| 2730 | 2828 | ||
| 2731 | static int pk_checkparam(lua_State *L, int type, int index) { | 2829 | const char *const *pk_getoptlist(int type, int *_nopts, int *_optoffset) { |
| 2830 | const char *const *optlist = NULL; | ||
| 2831 | int nopts = 0, optoffset = 0; | ||
| 2832 | |||
| 2732 | switch (type) { | 2833 | switch (type) { |
| 2733 | case EVP_PKEY_RSA: | 2834 | case EVP_PKEY_RSA: |
| 2734 | return luaL_checkoption(L, index, NULL, pk_rsa_optlist) + PK_RSA_OPTOFFSET; | 2835 | optlist = pk_rsa_optlist; |
| 2836 | nopts = countof(pk_rsa_optlist) - 1; | ||
| 2837 | optoffset = PK_RSA_OPTOFFSET; | ||
| 2838 | |||
| 2839 | break; | ||
| 2735 | case EVP_PKEY_DSA: | 2840 | case EVP_PKEY_DSA: |
| 2736 | return luaL_checkoption(L, index, NULL, pk_dsa_optlist) + PK_DSA_OPTOFFSET; | 2841 | optlist = pk_dsa_optlist; |
| 2842 | nopts = countof(pk_dsa_optlist) - 1; | ||
| 2843 | optoffset = PK_DSA_OPTOFFSET; | ||
| 2844 | |||
| 2845 | break; | ||
| 2737 | case EVP_PKEY_DH: | 2846 | case EVP_PKEY_DH: |
| 2738 | return luaL_checkoption(L, index, NULL, pk_dh_optlist) + PK_DH_OPTOFFSET; | 2847 | optlist = pk_dh_optlist; |
| 2848 | nopts = countof(pk_dh_optlist) - 1; | ||
| 2849 | optoffset = PK_DH_OPTOFFSET; | ||
| 2850 | |||
| 2851 | break; | ||
| 2739 | case EVP_PKEY_EC: | 2852 | case EVP_PKEY_EC: |
| 2740 | return luaL_checkoption(L, index, NULL, pk_ec_optlist) + PK_EC_OPTOFFSET; | 2853 | optlist = pk_ec_optlist; |
| 2741 | default: | 2854 | nopts = countof(pk_ec_optlist) - 1; |
| 2742 | return luaL_error(L, "%d: unsupported EVP_PKEY base type", type); | 2855 | optoffset = PK_EC_OPTOFFSET; |
| 2856 | |||
| 2857 | break; | ||
| 2743 | } | 2858 | } |
| 2744 | } /* pk_checkparam() */ | 2859 | |
| 2860 | if (_nopts) | ||
| 2861 | *_nopts = nopts; | ||
| 2862 | if (_optoffset) | ||
| 2863 | *_optoffset = optoffset; | ||
| 2864 | |||
| 2865 | return optlist; | ||
| 2866 | } /* pk_getoptlist() */ | ||
| 2745 | 2867 | ||
| 2746 | #ifndef OPENSSL_NO_EC | 2868 | #ifndef OPENSSL_NO_EC |
| 2747 | static EC_GROUP *ecg_dup_nil(lua_State *, const EC_GROUP *); | 2869 | static EC_GROUP *ecg_dup_nil(lua_State *, const EC_GROUP *); |
| 2748 | #endif | 2870 | #endif |
| 2749 | 2871 | ||
| 2750 | static void pk_pushparam(lua_State *L, void *_key, enum pk_param which) { | 2872 | static void pk_pushparam(lua_State *L, void *base_key, enum pk_param which) { |
| 2751 | union { | 2873 | union { |
| 2752 | RSA *rsa; | 2874 | RSA *rsa; |
| 2753 | DH *dh; | 2875 | DH *dh; |
| @@ -2755,7 +2877,7 @@ static void pk_pushparam(lua_State *L, void *_key, enum pk_param which) { | |||
| 2755 | #ifndef OPENSSL_NO_EC | 2877 | #ifndef OPENSSL_NO_EC |
| 2756 | EC_KEY *ec; | 2878 | EC_KEY *ec; |
| 2757 | #endif | 2879 | #endif |
| 2758 | } key = { _key }; | 2880 | } key = { base_key }; |
| 2759 | 2881 | ||
| 2760 | switch (which) { | 2882 | switch (which) { |
| 2761 | case PK_RSA_N: | 2883 | case PK_RSA_N: |
| @@ -2883,7 +3005,7 @@ static _Bool pk_bn_set_nothrow(BIGNUM **dst, BIGNUM *src) { | |||
| 2883 | goto sslerr; \ | 3005 | goto sslerr; \ |
| 2884 | } while (0) | 3006 | } while (0) |
| 2885 | 3007 | ||
| 2886 | static void pk_setparam(lua_State *L, void *_key, enum pk_param which, int index) { | 3008 | static void pk_setparam(lua_State *L, void *base_key, enum pk_param which, int index) { |
| 2887 | union { | 3009 | union { |
| 2888 | RSA *rsa; | 3010 | RSA *rsa; |
| 2889 | DH *dh; | 3011 | DH *dh; |
| @@ -2891,7 +3013,7 @@ static void pk_setparam(lua_State *L, void *_key, enum pk_param which, int index | |||
| 2891 | #ifndef OPENSSL_NO_EC | 3013 | #ifndef OPENSSL_NO_EC |
| 2892 | EC_KEY *ec; | 3014 | EC_KEY *ec; |
| 2893 | #endif | 3015 | #endif |
| 2894 | } key = { _key }; | 3016 | } key = { base_key }; |
| 2895 | 3017 | ||
| 2896 | switch (which) { | 3018 | switch (which) { |
| 2897 | case PK_RSA_N: | 3019 | case PK_RSA_N: |
| @@ -3014,76 +3136,51 @@ sslerr: | |||
| 3014 | 3136 | ||
| 3015 | 3137 | ||
| 3016 | static int pk_getParameters(lua_State *L) { | 3138 | static int pk_getParameters(lua_State *L) { |
| 3017 | EVP_PKEY *_key = checksimple(L, 1, PKEY_CLASS); | 3139 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); |
| 3018 | int type = EVP_PKEY_base_id(_key); | 3140 | int base_type = EVP_PKEY_base_id(key); |
| 3019 | void *key; | 3141 | void *base_key; |
| 3020 | int otop, index, tindex; | 3142 | const char *const *optlist; |
| 3143 | int nopts, optoffset, otop, index, tindex; | ||
| 3021 | 3144 | ||
| 3022 | if (!(key = EVP_PKEY_get0(_key))) | 3145 | if (!(base_key = EVP_PKEY_get0(key))) |
| 3023 | goto sslerr; | 3146 | goto sslerr; |
| 3024 | 3147 | ||
| 3025 | if (lua_isnoneornil(L, 2)) { | 3148 | if (!(optlist = pk_getoptlist(base_type, &nopts, &optoffset))) |
| 3026 | const char *const *optlist; | 3149 | return luaL_error(L, "%d: unsupported EVP_PKEY base type", base_type); |
| 3027 | const char *const *opt; | ||
| 3028 | |||
| 3029 | switch (type) { | ||
| 3030 | case EVP_PKEY_RSA: | ||
| 3031 | optlist = pk_rsa_optlist; | ||
| 3032 | luaL_checkstack(L, countof(pk_rsa_optlist), ""); | ||
| 3033 | |||
| 3034 | break; | ||
| 3035 | case EVP_PKEY_DSA: | ||
| 3036 | optlist = pk_dsa_optlist; | ||
| 3037 | luaL_checkstack(L, countof(pk_dsa_optlist), ""); | ||
| 3038 | |||
| 3039 | break; | ||
| 3040 | case EVP_PKEY_DH: | ||
| 3041 | optlist = pk_dh_optlist; | ||
| 3042 | luaL_checkstack(L, countof(pk_dh_optlist), ""); | ||
| 3043 | |||
| 3044 | break; | ||
| 3045 | case EVP_PKEY_EC: | ||
| 3046 | optlist = pk_ec_optlist; | ||
| 3047 | luaL_checkstack(L, countof(pk_ec_optlist), ""); | ||
| 3048 | |||
| 3049 | break; | ||
| 3050 | default: | ||
| 3051 | return luaL_error(L, "%d: unsupported EVP_PKEY base type", type); | ||
| 3052 | } | ||
| 3053 | 3150 | ||
| 3151 | if (lua_isnoneornil(L, 2)) { | ||
| 3054 | /* | 3152 | /* |
| 3055 | * Use special "{" parameter to tell loop to push table. | 3153 | * Use special "{" parameter to tell loop to push table. |
| 3056 | * Subsequent parameters will be assigned as fields. | 3154 | * Subsequent parameters will be assigned as fields. |
| 3057 | * | ||
| 3058 | * NOTE: optlist arrays are NULL-terminated. luaL_checkstack() | ||
| 3059 | * calls above left room for "{". | ||
| 3060 | */ | 3155 | */ |
| 3061 | lua_pushstring(L, "{"); | 3156 | lua_pushstring(L, "{"); |
| 3062 | 3157 | luaL_checkstack(L, nopts, NULL); | |
| 3063 | for (opt = optlist; *opt; opt++) { | 3158 | for (const char *const *optname = optlist; *optname; optname++) { |
| 3064 | lua_pushstring(L, *opt); | 3159 | lua_pushstring(L, *optname); |
| 3065 | } | 3160 | } |
| 3066 | } | 3161 | } |
| 3067 | 3162 | ||
| 3068 | otop = lua_gettop(L); | 3163 | otop = lua_gettop(L); |
| 3069 | 3164 | ||
| 3070 | /* provide space for results and working area */ | 3165 | /* provide space for results and working area */ |
| 3071 | luaL_checkstack(L, (otop - 1) + LUA_MINSTACK, ""); | 3166 | luaL_checkstack(L, (otop - 1) + LUA_MINSTACK, NULL); |
| 3072 | 3167 | ||
| 3073 | /* no table index, yet */ | 3168 | /* no table index, yet */ |
| 3074 | tindex = 0; | 3169 | tindex = 0; |
| 3075 | 3170 | ||
| 3076 | for (index = 2; index <= otop; index++) { | 3171 | for (index = 2; index <= otop; index++) { |
| 3077 | const char *opt = luaL_checkstring(L, index); | 3172 | const char *optname = luaL_checkstring(L, index); |
| 3173 | int optid; | ||
| 3078 | 3174 | ||
| 3079 | if (*opt == '{') { | 3175 | if (*optname == '{') { |
| 3080 | lua_newtable(L); | 3176 | lua_newtable(L); |
| 3081 | tindex = lua_gettop(L); | 3177 | tindex = lua_gettop(L); |
| 3082 | } else { | 3178 | } else { |
| 3083 | pk_pushparam(L, key, pk_checkparam(L, type, index)); | 3179 | optid = luaL_checkoption(L, index, NULL, optlist) + optoffset; |
| 3180 | pk_pushparam(L, base_key, optid); | ||
| 3084 | 3181 | ||
| 3085 | if (tindex) { | 3182 | if (tindex) { |
| 3086 | lua_setfield(L, tindex, opt); | 3183 | lua_setfield(L, tindex, optname); |
| 3087 | } | 3184 | } |
| 3088 | } | 3185 | } |
| 3089 | } | 3186 | } |
| @@ -3095,45 +3192,23 @@ sslerr: | |||
| 3095 | 3192 | ||
| 3096 | 3193 | ||
| 3097 | static int pk_setParameters(lua_State *L) { | 3194 | static int pk_setParameters(lua_State *L) { |
| 3098 | EVP_PKEY *_key = checksimple(L, 1, PKEY_CLASS); | 3195 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); |
| 3099 | int type = EVP_PKEY_base_id(_key); | 3196 | int base_type = EVP_PKEY_base_id(key); |
| 3100 | void *key; | 3197 | void *base_key; |
| 3101 | const char *const *optlist; | 3198 | const char *const *optlist; |
| 3102 | int optindex, optoffset; | 3199 | int optindex, optoffset; |
| 3103 | 3200 | ||
| 3104 | luaL_checktype(L, 2, LUA_TTABLE); | 3201 | luaL_checktype(L, 2, LUA_TTABLE); |
| 3105 | 3202 | ||
| 3106 | if (!(key = EVP_PKEY_get0(_key))) | 3203 | if (!(base_key = EVP_PKEY_get0(key))) |
| 3107 | goto sslerr; | 3204 | goto sslerr; |
| 3108 | 3205 | ||
| 3109 | switch (type) { | 3206 | if (!(optlist = pk_getoptlist(base_type, NULL, &optoffset))) |
| 3110 | case EVP_PKEY_RSA: | 3207 | return luaL_error(L, "%d: unsupported EVP_PKEY base type", base_type); |
| 3111 | optlist = pk_rsa_optlist; | ||
| 3112 | optoffset = PK_RSA_OPTOFFSET; | ||
| 3113 | |||
| 3114 | break; | ||
| 3115 | case EVP_PKEY_DSA: | ||
| 3116 | optlist = pk_dsa_optlist; | ||
| 3117 | optoffset = PK_DSA_OPTOFFSET; | ||
| 3118 | |||
| 3119 | break; | ||
| 3120 | case EVP_PKEY_DH: | ||
| 3121 | optlist = pk_dh_optlist; | ||
| 3122 | optoffset = PK_DH_OPTOFFSET; | ||
| 3123 | |||
| 3124 | break; | ||
| 3125 | case EVP_PKEY_EC: | ||
| 3126 | optlist = pk_ec_optlist; | ||
| 3127 | optoffset = PK_EC_OPTOFFSET; | ||
| 3128 | |||
| 3129 | break; | ||
| 3130 | default: | ||
| 3131 | return luaL_error(L, "%d: unsupported EVP_PKEY base type", type); | ||
| 3132 | } | ||
| 3133 | 3208 | ||
| 3134 | for (optindex = 0; optlist[optindex]; optindex++) { | 3209 | for (optindex = 0; optlist[optindex]; optindex++) { |
| 3135 | if (getfield(L, 2, optlist[optindex])) { | 3210 | if (getfield(L, 2, optlist[optindex])) { |
| 3136 | pk_setparam(L, key, optindex + optoffset, -1); | 3211 | pk_setparam(L, base_key, optindex + optoffset, -1); |
| 3137 | lua_pop(L, 1); | 3212 | lua_pop(L, 1); |
| 3138 | } | 3213 | } |
| 3139 | } | 3214 | } |
| @@ -3170,6 +3245,55 @@ static int pk__tostring(lua_State *L) { | |||
| 3170 | } /* pk__tostring() */ | 3245 | } /* pk__tostring() */ |
| 3171 | 3246 | ||
| 3172 | 3247 | ||
| 3248 | static int pk__index(lua_State *L) { | ||
| 3249 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); | ||
| 3250 | void *base_key; | ||
| 3251 | const char *const *optlist; | ||
| 3252 | int optoffset, listoffset; | ||
| 3253 | |||
| 3254 | lua_pushvalue(L, lua_upvalueindex(1)); | ||
| 3255 | lua_pushvalue(L, 2); | ||
| 3256 | lua_gettable(L, -2); | ||
| 3257 | |||
| 3258 | if (!lua_isnil(L, -1)) | ||
| 3259 | return 1; | ||
| 3260 | |||
| 3261 | if (!lua_isstring(L, 2)) | ||
| 3262 | return 0; | ||
| 3263 | if (!(base_key = EVP_PKEY_get0(key))) | ||
| 3264 | return 0; | ||
| 3265 | if (!(optlist = pk_getoptlist(EVP_PKEY_base_id(key), NULL, &optoffset))) | ||
| 3266 | return 0; | ||
| 3267 | if (-1 == (listoffset = auxL_testoption(L, 2, NULL, optlist, 0))) | ||
| 3268 | return 0; | ||
| 3269 | |||
| 3270 | pk_pushparam(L, base_key, listoffset + optoffset); | ||
| 3271 | |||
| 3272 | return 1; | ||
| 3273 | } /* pk__index() */ | ||
| 3274 | |||
| 3275 | |||
| 3276 | static int pk__newindex(lua_State *L) { | ||
| 3277 | EVP_PKEY *key = checksimple(L, 1, PKEY_CLASS); | ||
| 3278 | void *base_key; | ||
| 3279 | const char *const *optlist; | ||
| 3280 | int optoffset, listoffset; | ||
| 3281 | |||
| 3282 | if (!lua_isstring(L, 2)) | ||
| 3283 | return 0; | ||
| 3284 | if (!(base_key = EVP_PKEY_get0(key))) | ||
| 3285 | return 0; | ||
| 3286 | if (!(optlist = pk_getoptlist(EVP_PKEY_base_id(key), NULL, &optoffset))) | ||
| 3287 | return 0; | ||
| 3288 | if (-1 == (listoffset = auxL_testoption(L, 2, NULL, optlist, 0))) | ||
| 3289 | return 0; | ||
| 3290 | |||
| 3291 | pk_setparam(L, base_key, listoffset + optoffset, 3); | ||
| 3292 | |||
| 3293 | return 0; | ||
| 3294 | } /* pk__newindex() */ | ||
| 3295 | |||
| 3296 | |||
| 3173 | static int pk__gc(lua_State *L) { | 3297 | static int pk__gc(lua_State *L) { |
| 3174 | EVP_PKEY **ud = luaL_checkudata(L, 1, PKEY_CLASS); | 3298 | EVP_PKEY **ud = luaL_checkudata(L, 1, PKEY_CLASS); |
| 3175 | 3299 | ||
| @@ -3182,7 +3306,7 @@ static int pk__gc(lua_State *L) { | |||
| 3182 | } /* pk__gc() */ | 3306 | } /* pk__gc() */ |
| 3183 | 3307 | ||
| 3184 | 3308 | ||
| 3185 | static const luaL_Reg pk_methods[] = { | 3309 | static const auxL_Reg pk_methods[] = { |
| 3186 | { "type", &pk_type }, | 3310 | { "type", &pk_type }, |
| 3187 | { "setPublicKey", &pk_setPublicKey }, | 3311 | { "setPublicKey", &pk_setPublicKey }, |
| 3188 | { "setPrivateKey", &pk_setPrivateKey }, | 3312 | { "setPrivateKey", &pk_setPrivateKey }, |
| @@ -3194,23 +3318,38 @@ static const luaL_Reg pk_methods[] = { | |||
| 3194 | { NULL, NULL }, | 3318 | { NULL, NULL }, |
| 3195 | }; | 3319 | }; |
| 3196 | 3320 | ||
| 3197 | static const luaL_Reg pk_metatable[] = { | 3321 | static const auxL_Reg pk_metatable[] = { |
| 3198 | { "__tostring", &pk__tostring }, | 3322 | { "__tostring", &pk__tostring }, |
| 3323 | { "__index", &pk__index, 1 }, | ||
| 3324 | { "__newindex", &pk__newindex, 1 }, | ||
| 3199 | { "__gc", &pk__gc }, | 3325 | { "__gc", &pk__gc }, |
| 3200 | { NULL, NULL }, | 3326 | { NULL, NULL }, |
| 3201 | }; | 3327 | }; |
| 3202 | 3328 | ||
| 3203 | 3329 | ||
| 3204 | static const luaL_Reg pk_globals[] = { | 3330 | static const auxL_Reg pk_globals[] = { |
| 3205 | { "new", &pk_new }, | 3331 | { "new", &pk_new }, |
| 3206 | { "interpose", &pk_interpose }, | 3332 | { "interpose", &pk_interpose }, |
| 3207 | { NULL, NULL }, | 3333 | { NULL, NULL }, |
| 3208 | }; | 3334 | }; |
| 3209 | 3335 | ||
| 3336 | static void pk_luainit(lua_State *L, _Bool reset) { | ||
| 3337 | if (!auxL_newmetatable(L, PKEY_CLASS, reset)) | ||
| 3338 | return; | ||
| 3339 | auxL_setfuncs(L, pk_metatable, 0); | ||
| 3340 | auxL_newlib(L, pk_methods, 0); | ||
| 3341 | for (char **k = (char *[]){ "__index", "__newindex", 0 }; *k; k++) { | ||
| 3342 | lua_getfield(L, -2, *k); /* closure */ | ||
| 3343 | lua_pushvalue(L, -2); /* method table */ | ||
| 3344 | lua_setupvalue(L, -2, 1); | ||
| 3345 | } | ||
| 3346 | lua_pop(L, 2); | ||
| 3347 | } /* pk_luainit() */ | ||
| 3348 | |||
| 3210 | int luaopen__openssl_pkey(lua_State *L) { | 3349 | int luaopen__openssl_pkey(lua_State *L) { |
| 3211 | initall(L); | 3350 | initall(L); |
| 3212 | 3351 | ||
| 3213 | luaL_newlib(L, pk_globals); | 3352 | auxL_newlib(L, pk_globals, 0); |
| 3214 | 3353 | ||
| 3215 | return 1; | 3354 | return 1; |
| 3216 | } /* luaopen__openssl_pkey() */ | 3355 | } /* luaopen__openssl_pkey() */ |
| @@ -3391,18 +3530,18 @@ static int ecg__gc(lua_State *L) { | |||
| 3391 | return 0; | 3530 | return 0; |
| 3392 | } /* ecg__gc() */ | 3531 | } /* ecg__gc() */ |
| 3393 | 3532 | ||
| 3394 | static const luaL_Reg ecg_methods[] = { | 3533 | static const auxL_Reg ecg_methods[] = { |
| 3395 | { "tostring", &ecg_tostring }, | 3534 | { "tostring", &ecg_tostring }, |
| 3396 | { NULL, NULL }, | 3535 | { NULL, NULL }, |
| 3397 | }; | 3536 | }; |
| 3398 | 3537 | ||
| 3399 | static const luaL_Reg ecg_metatable[] = { | 3538 | static const auxL_Reg ecg_metatable[] = { |
| 3400 | { "__tostring", &ecg__tostring }, | 3539 | { "__tostring", &ecg__tostring }, |
| 3401 | { "__gc", &ecg__gc }, | 3540 | { "__gc", &ecg__gc }, |
| 3402 | { NULL, NULL }, | 3541 | { NULL, NULL }, |
| 3403 | }; | 3542 | }; |
| 3404 | 3543 | ||
| 3405 | static const luaL_Reg ecg_globals[] = { | 3544 | static const auxL_Reg ecg_globals[] = { |
| 3406 | { "new", &ecg_new }, | 3545 | { "new", &ecg_new }, |
| 3407 | { "interpose", &ecg_interpose }, | 3546 | { "interpose", &ecg_interpose }, |
| 3408 | { NULL, NULL }, | 3547 | { NULL, NULL }, |
| @@ -3414,7 +3553,7 @@ int luaopen__openssl_ec_group(lua_State *L) { | |||
| 3414 | #ifndef OPENSSL_NO_EC | 3553 | #ifndef OPENSSL_NO_EC |
| 3415 | initall(L); | 3554 | initall(L); |
| 3416 | 3555 | ||
| 3417 | luaL_newlib(L, ecg_globals); | 3556 | auxL_newlib(L, ecg_globals, 0); |
| 3418 | 3557 | ||
| 3419 | return 1; | 3558 | return 1; |
| 3420 | #else | 3559 | #else |
| @@ -3597,13 +3736,13 @@ static int xn__tostring(lua_State *L) { | |||
| 3597 | } /* xn__tostring() */ | 3736 | } /* xn__tostring() */ |
| 3598 | 3737 | ||
| 3599 | 3738 | ||
| 3600 | static const luaL_Reg xn_methods[] = { | 3739 | static const auxL_Reg xn_methods[] = { |
| 3601 | { "add", &xn_add }, | 3740 | { "add", &xn_add }, |
| 3602 | { "all", &xn_all }, | 3741 | { "all", &xn_all }, |
| 3603 | { NULL, NULL }, | 3742 | { NULL, NULL }, |
| 3604 | }; | 3743 | }; |
| 3605 | 3744 | ||
| 3606 | static const luaL_Reg xn_metatable[] = { | 3745 | static const auxL_Reg xn_metatable[] = { |
| 3607 | { "__pairs", &xn__pairs }, | 3746 | { "__pairs", &xn__pairs }, |
| 3608 | { "__gc", &xn__gc }, | 3747 | { "__gc", &xn__gc }, |
| 3609 | { "__tostring", &xn__tostring }, | 3748 | { "__tostring", &xn__tostring }, |
| @@ -3611,7 +3750,7 @@ static const luaL_Reg xn_metatable[] = { | |||
| 3611 | }; | 3750 | }; |
| 3612 | 3751 | ||
| 3613 | 3752 | ||
| 3614 | static const luaL_Reg xn_globals[] = { | 3753 | static const auxL_Reg xn_globals[] = { |
| 3615 | { "new", &xn_new }, | 3754 | { "new", &xn_new }, |
| 3616 | { "interpose", &xn_interpose }, | 3755 | { "interpose", &xn_interpose }, |
| 3617 | { NULL, NULL }, | 3756 | { NULL, NULL }, |
| @@ -3620,7 +3759,7 @@ static const luaL_Reg xn_globals[] = { | |||
| 3620 | int luaopen__openssl_x509_name(lua_State *L) { | 3759 | int luaopen__openssl_x509_name(lua_State *L) { |
| 3621 | initall(L); | 3760 | initall(L); |
| 3622 | 3761 | ||
| 3623 | luaL_newlib(L, xn_globals); | 3762 | auxL_newlib(L, xn_globals, 0); |
| 3624 | 3763 | ||
| 3625 | return 1; | 3764 | return 1; |
| 3626 | } /* luaopen__openssl_x509_name() */ | 3765 | } /* luaopen__openssl_x509_name() */ |
| @@ -3853,19 +3992,19 @@ static int gn__gc(lua_State *L) { | |||
| 3853 | } /* gn__gc() */ | 3992 | } /* gn__gc() */ |
| 3854 | 3993 | ||
| 3855 | 3994 | ||
| 3856 | static const luaL_Reg gn_methods[] = { | 3995 | static const auxL_Reg gn_methods[] = { |
| 3857 | { "add", &gn_add }, | 3996 | { "add", &gn_add }, |
| 3858 | { NULL, NULL }, | 3997 | { NULL, NULL }, |
| 3859 | }; | 3998 | }; |
| 3860 | 3999 | ||
| 3861 | static const luaL_Reg gn_metatable[] = { | 4000 | static const auxL_Reg gn_metatable[] = { |
| 3862 | { "__pairs", &gn__pairs }, | 4001 | { "__pairs", &gn__pairs }, |
| 3863 | { "__gc", &gn__gc }, | 4002 | { "__gc", &gn__gc }, |
| 3864 | { NULL, NULL }, | 4003 | { NULL, NULL }, |
| 3865 | }; | 4004 | }; |
| 3866 | 4005 | ||
| 3867 | 4006 | ||
| 3868 | static const luaL_Reg gn_globals[] = { | 4007 | static const auxL_Reg gn_globals[] = { |
| 3869 | { "new", &gn_new }, | 4008 | { "new", &gn_new }, |
| 3870 | { "interpose", &gn_interpose }, | 4009 | { "interpose", &gn_interpose }, |
| 3871 | { NULL, NULL }, | 4010 | { NULL, NULL }, |
| @@ -3874,7 +4013,7 @@ static const luaL_Reg gn_globals[] = { | |||
| 3874 | int luaopen__openssl_x509_altname(lua_State *L) { | 4013 | int luaopen__openssl_x509_altname(lua_State *L) { |
| 3875 | initall(L); | 4014 | initall(L); |
| 3876 | 4015 | ||
| 3877 | luaL_newlib(L, gn_globals); | 4016 | auxL_newlib(L, gn_globals, 0); |
| 3878 | 4017 | ||
| 3879 | return 1; | 4018 | return 1; |
| 3880 | } /* luaopen__openssl_x509_altname() */ | 4019 | } /* luaopen__openssl_x509_altname() */ |
| @@ -4077,7 +4216,7 @@ static int xe__gc(lua_State *L) { | |||
| 4077 | } /* xe__gc() */ | 4216 | } /* xe__gc() */ |
| 4078 | 4217 | ||
| 4079 | 4218 | ||
| 4080 | static const luaL_Reg xe_methods[] = { | 4219 | static const auxL_Reg xe_methods[] = { |
| 4081 | { "getID", &xe_getID }, | 4220 | { "getID", &xe_getID }, |
| 4082 | { "getName", &xe_getName }, | 4221 | { "getName", &xe_getName }, |
| 4083 | { "getShortName", &xe_getShortName }, | 4222 | { "getShortName", &xe_getShortName }, |
| @@ -4088,13 +4227,13 @@ static const luaL_Reg xe_methods[] = { | |||
| 4088 | { NULL, NULL }, | 4227 | { NULL, NULL }, |
| 4089 | }; | 4228 | }; |
| 4090 | 4229 | ||
| 4091 | static const luaL_Reg xe_metatable[] = { | 4230 | static const auxL_Reg xe_metatable[] = { |
| 4092 | { "__gc", &xe__gc }, | 4231 | { "__gc", &xe__gc }, |
| 4093 | { NULL, NULL }, | 4232 | { NULL, NULL }, |
| 4094 | }; | 4233 | }; |
| 4095 | 4234 | ||
| 4096 | 4235 | ||
| 4097 | static const luaL_Reg xe_globals[] = { | 4236 | static const auxL_Reg xe_globals[] = { |
| 4098 | { "new", &xe_new }, | 4237 | { "new", &xe_new }, |
| 4099 | { "interpose", &xe_interpose }, | 4238 | { "interpose", &xe_interpose }, |
| 4100 | { NULL, NULL }, | 4239 | { NULL, NULL }, |
| @@ -4111,7 +4250,7 @@ static const auxL_IntegerReg xe_textopts[] = { | |||
| 4111 | int luaopen__openssl_x509_extension(lua_State *L) { | 4250 | int luaopen__openssl_x509_extension(lua_State *L) { |
| 4112 | initall(L); | 4251 | initall(L); |
| 4113 | 4252 | ||
| 4114 | luaL_newlib(L, xe_globals); | 4253 | auxL_newlib(L, xe_globals, 0); |
| 4115 | auxL_setintegers(L, xe_textopts); | 4254 | auxL_setintegers(L, xe_textopts); |
| 4116 | 4255 | ||
| 4117 | return 1; | 4256 | return 1; |
| @@ -4683,7 +4822,7 @@ static int xc_getBasicConstraint(lua_State *L) { | |||
| 4683 | int n = 0, i, top; | 4822 | int n = 0, i, top; |
| 4684 | 4823 | ||
| 4685 | for (i = 2, top = lua_gettop(L); i <= top; i++) { | 4824 | for (i = 2, top = lua_gettop(L); i <= top; i++) { |
| 4686 | switch (checkoption(L, i, 0, (const char *[]){ "CA", "pathLen", "pathLenConstraint", NULL })) { | 4825 | switch (auxL_checkoption(L, i, 0, (const char *[]){ "CA", "pathLen", "pathLenConstraint", NULL }, 1)) { |
| 4687 | case 0: | 4826 | case 0: |
| 4688 | lua_pushboolean(L, CA); | 4827 | lua_pushboolean(L, CA); |
| 4689 | n++; | 4828 | n++; |
| @@ -4739,7 +4878,7 @@ static int xc_setBasicConstraint(lua_State *L) { | |||
| 4739 | } else { | 4878 | } else { |
| 4740 | lua_settop(L, 3); | 4879 | lua_settop(L, 3); |
| 4741 | 4880 | ||
| 4742 | switch (checkoption(L, 2, 0, (const char *[]){ "CA", "pathLen", "pathLenConstraint", NULL })) { | 4881 | switch (auxL_checkoption(L, 2, 0, (const char *[]){ "CA", "pathLen", "pathLenConstraint", NULL }, 1)) { |
| 4743 | case 0: | 4882 | case 0: |
| 4744 | luaL_checktype(L, 3, LUA_TBOOLEAN); | 4883 | luaL_checktype(L, 3, LUA_TBOOLEAN); |
| 4745 | CA = lua_toboolean(L, 3); | 4884 | CA = lua_toboolean(L, 3); |
| @@ -5080,7 +5219,7 @@ static int xc__gc(lua_State *L) { | |||
| 5080 | } /* xc__gc() */ | 5219 | } /* xc__gc() */ |
| 5081 | 5220 | ||
| 5082 | 5221 | ||
| 5083 | static const luaL_Reg xc_methods[] = { | 5222 | static const auxL_Reg xc_methods[] = { |
| 5084 | { "getVersion", &xc_getVersion }, | 5223 | { "getVersion", &xc_getVersion }, |
| 5085 | { "setVersion", &xc_setVersion }, | 5224 | { "setVersion", &xc_setVersion }, |
| 5086 | { "getSerial", &xc_getSerial }, | 5225 | { "getSerial", &xc_getSerial }, |
| @@ -5119,14 +5258,14 @@ static const luaL_Reg xc_methods[] = { | |||
| 5119 | { NULL, NULL }, | 5258 | { NULL, NULL }, |
| 5120 | }; | 5259 | }; |
| 5121 | 5260 | ||
| 5122 | static const luaL_Reg xc_metatable[] = { | 5261 | static const auxL_Reg xc_metatable[] = { |
| 5123 | { "__tostring", &xc__tostring }, | 5262 | { "__tostring", &xc__tostring }, |
| 5124 | { "__gc", &xc__gc }, | 5263 | { "__gc", &xc__gc }, |
| 5125 | { NULL, NULL }, | 5264 | { NULL, NULL }, |
| 5126 | }; | 5265 | }; |
| 5127 | 5266 | ||
| 5128 | 5267 | ||
| 5129 | static const luaL_Reg xc_globals[] = { | 5268 | static const auxL_Reg xc_globals[] = { |
| 5130 | { "new", &xc_new }, | 5269 | { "new", &xc_new }, |
| 5131 | { "interpose", &xc_interpose }, | 5270 | { "interpose", &xc_interpose }, |
| 5132 | { NULL, NULL }, | 5271 | { NULL, NULL }, |
| @@ -5135,7 +5274,7 @@ static const luaL_Reg xc_globals[] = { | |||
| 5135 | int luaopen__openssl_x509_cert(lua_State *L) { | 5274 | int luaopen__openssl_x509_cert(lua_State *L) { |
| 5136 | initall(L); | 5275 | initall(L); |
| 5137 | 5276 | ||
| 5138 | luaL_newlib(L, xc_globals); | 5277 | auxL_newlib(L, xc_globals, 0); |
| 5139 | 5278 | ||
| 5140 | return 1; | 5279 | return 1; |
| 5141 | } /* luaopen__openssl_x509_cert() */ | 5280 | } /* luaopen__openssl_x509_cert() */ |
| @@ -5315,7 +5454,7 @@ static int xr__gc(lua_State *L) { | |||
| 5315 | return 0; | 5454 | return 0; |
| 5316 | } /* xr__gc() */ | 5455 | } /* xr__gc() */ |
| 5317 | 5456 | ||
| 5318 | static const luaL_Reg xr_methods[] = { | 5457 | static const auxL_Reg xr_methods[] = { |
| 5319 | { "getVersion", &xr_getVersion }, | 5458 | { "getVersion", &xr_getVersion }, |
| 5320 | { "setVersion", &xr_setVersion }, | 5459 | { "setVersion", &xr_setVersion }, |
| 5321 | { "getSubject", &xr_getSubject }, | 5460 | { "getSubject", &xr_getSubject }, |
| @@ -5327,14 +5466,14 @@ static const luaL_Reg xr_methods[] = { | |||
| 5327 | { NULL, NULL }, | 5466 | { NULL, NULL }, |
| 5328 | }; | 5467 | }; |
| 5329 | 5468 | ||
| 5330 | static const luaL_Reg xr_metatable[] = { | 5469 | static const auxL_Reg xr_metatable[] = { |
| 5331 | { "__tostring", &xr__tostring }, | 5470 | { "__tostring", &xr__tostring }, |
| 5332 | { "__gc", &xr__gc }, | 5471 | { "__gc", &xr__gc }, |
| 5333 | { NULL, NULL }, | 5472 | { NULL, NULL }, |
| 5334 | }; | 5473 | }; |
| 5335 | 5474 | ||
| 5336 | 5475 | ||
| 5337 | static const luaL_Reg xr_globals[] = { | 5476 | static const auxL_Reg xr_globals[] = { |
| 5338 | { "new", &xr_new }, | 5477 | { "new", &xr_new }, |
| 5339 | { "interpose", &xr_interpose }, | 5478 | { "interpose", &xr_interpose }, |
| 5340 | { NULL, NULL }, | 5479 | { NULL, NULL }, |
| @@ -5343,7 +5482,7 @@ static const luaL_Reg xr_globals[] = { | |||
| 5343 | int luaopen__openssl_x509_csr(lua_State *L) { | 5482 | int luaopen__openssl_x509_csr(lua_State *L) { |
| 5344 | initall(L); | 5483 | initall(L); |
| 5345 | 5484 | ||
| 5346 | luaL_newlib(L, xr_globals); | 5485 | auxL_newlib(L, xr_globals, 0); |
| 5347 | 5486 | ||
| 5348 | return 1; | 5487 | return 1; |
| 5349 | } /* luaopen__openssl_x509_csr() */ | 5488 | } /* luaopen__openssl_x509_csr() */ |
| @@ -5706,7 +5845,7 @@ static int xx__gc(lua_State *L) { | |||
| 5706 | return 0; | 5845 | return 0; |
| 5707 | } /* xx__gc() */ | 5846 | } /* xx__gc() */ |
| 5708 | 5847 | ||
| 5709 | static const luaL_Reg xx_methods[] = { | 5848 | static const auxL_Reg xx_methods[] = { |
| 5710 | { "getVersion", &xx_getVersion }, | 5849 | { "getVersion", &xx_getVersion }, |
| 5711 | { "setVersion", &xx_setVersion }, | 5850 | { "setVersion", &xx_setVersion }, |
| 5712 | { "getLastUpdate", &xx_getLastUpdate }, | 5851 | { "getLastUpdate", &xx_getLastUpdate }, |
| @@ -5725,14 +5864,14 @@ static const luaL_Reg xx_methods[] = { | |||
| 5725 | { NULL, NULL }, | 5864 | { NULL, NULL }, |
| 5726 | }; | 5865 | }; |
| 5727 | 5866 | ||
| 5728 | static const luaL_Reg xx_metatable[] = { | 5867 | static const auxL_Reg xx_metatable[] = { |
| 5729 | { "__tostring", &xx__tostring }, | 5868 | { "__tostring", &xx__tostring }, |
| 5730 | { "__gc", &xx__gc }, | 5869 | { "__gc", &xx__gc }, |
| 5731 | { NULL, NULL }, | 5870 | { NULL, NULL }, |
| 5732 | }; | 5871 | }; |
| 5733 | 5872 | ||
| 5734 | 5873 | ||
| 5735 | static const luaL_Reg xx_globals[] = { | 5874 | static const auxL_Reg xx_globals[] = { |
| 5736 | { "new", &xx_new }, | 5875 | { "new", &xx_new }, |
| 5737 | { "interpose", &xx_interpose }, | 5876 | { "interpose", &xx_interpose }, |
| 5738 | { NULL, NULL }, | 5877 | { NULL, NULL }, |
| @@ -5741,7 +5880,7 @@ static const luaL_Reg xx_globals[] = { | |||
| 5741 | int luaopen__openssl_x509_crl(lua_State *L) { | 5880 | int luaopen__openssl_x509_crl(lua_State *L) { |
| 5742 | initall(L); | 5881 | initall(L); |
| 5743 | 5882 | ||
| 5744 | luaL_newlib(L, xx_globals); | 5883 | auxL_newlib(L, xx_globals, 0); |
| 5745 | 5884 | ||
| 5746 | return 1; | 5885 | return 1; |
| 5747 | } /* luaopen__openssl_x509_crl() */ | 5886 | } /* luaopen__openssl_x509_crl() */ |
| @@ -5878,19 +6017,19 @@ static int xl__gc(lua_State *L) { | |||
| 5878 | } /* xl__gc() */ | 6017 | } /* xl__gc() */ |
| 5879 | 6018 | ||
| 5880 | 6019 | ||
| 5881 | static const luaL_Reg xl_methods[] = { | 6020 | static const auxL_Reg xl_methods[] = { |
| 5882 | { "add", &xl_add }, | 6021 | { "add", &xl_add }, |
| 5883 | { NULL, NULL }, | 6022 | { NULL, NULL }, |
| 5884 | }; | 6023 | }; |
| 5885 | 6024 | ||
| 5886 | static const luaL_Reg xl_metatable[] = { | 6025 | static const auxL_Reg xl_metatable[] = { |
| 5887 | { "__pairs", &xl__pairs }, | 6026 | { "__pairs", &xl__pairs }, |
| 5888 | { "__ipairs", &xl__pairs }, | 6027 | { "__ipairs", &xl__pairs }, |
| 5889 | { "__gc", &xl__gc }, | 6028 | { "__gc", &xl__gc }, |
| 5890 | { NULL, NULL }, | 6029 | { NULL, NULL }, |
| 5891 | }; | 6030 | }; |
| 5892 | 6031 | ||
| 5893 | static const luaL_Reg xl_globals[] = { | 6032 | static const auxL_Reg xl_globals[] = { |
| 5894 | { "new", &xl_new }, | 6033 | { "new", &xl_new }, |
| 5895 | { "interpose", &xl_interpose }, | 6034 | { "interpose", &xl_interpose }, |
| 5896 | { NULL, NULL }, | 6035 | { NULL, NULL }, |
| @@ -5899,7 +6038,7 @@ static const luaL_Reg xl_globals[] = { | |||
| 5899 | int luaopen__openssl_x509_chain(lua_State *L) { | 6038 | int luaopen__openssl_x509_chain(lua_State *L) { |
| 5900 | initall(L); | 6039 | initall(L); |
| 5901 | 6040 | ||
| 5902 | luaL_newlib(L, xl_globals); | 6041 | auxL_newlib(L, xl_globals, 0); |
| 5903 | 6042 | ||
| 5904 | return 1; | 6043 | return 1; |
| 5905 | } /* luaopen__openssl_x509_chain() */ | 6044 | } /* luaopen__openssl_x509_chain() */ |
| @@ -6043,18 +6182,18 @@ static int xs__gc(lua_State *L) { | |||
| 6043 | } /* xs__gc() */ | 6182 | } /* xs__gc() */ |
| 6044 | 6183 | ||
| 6045 | 6184 | ||
| 6046 | static const luaL_Reg xs_methods[] = { | 6185 | static const auxL_Reg xs_methods[] = { |
| 6047 | { "add", &xs_add }, | 6186 | { "add", &xs_add }, |
| 6048 | { "verify", &xs_verify }, | 6187 | { "verify", &xs_verify }, |
| 6049 | { NULL, NULL }, | 6188 | { NULL, NULL }, |
| 6050 | }; | 6189 | }; |
| 6051 | 6190 | ||
| 6052 | static const luaL_Reg xs_metatable[] = { | 6191 | static const auxL_Reg xs_metatable[] = { |
| 6053 | { "__gc", &xs__gc }, | 6192 | { "__gc", &xs__gc }, |
| 6054 | { NULL, NULL }, | 6193 | { NULL, NULL }, |
| 6055 | }; | 6194 | }; |
| 6056 | 6195 | ||
| 6057 | static const luaL_Reg xs_globals[] = { | 6196 | static const auxL_Reg xs_globals[] = { |
| 6058 | { "new", &xs_new }, | 6197 | { "new", &xs_new }, |
| 6059 | { "interpose", &xs_interpose }, | 6198 | { "interpose", &xs_interpose }, |
| 6060 | { NULL, NULL }, | 6199 | { NULL, NULL }, |
| @@ -6063,7 +6202,7 @@ static const luaL_Reg xs_globals[] = { | |||
| 6063 | int luaopen__openssl_x509_store(lua_State *L) { | 6202 | int luaopen__openssl_x509_store(lua_State *L) { |
| 6064 | initall(L); | 6203 | initall(L); |
| 6065 | 6204 | ||
| 6066 | luaL_newlib(L, xs_globals); | 6205 | auxL_newlib(L, xs_globals, 0); |
| 6067 | 6206 | ||
| 6068 | return 1; | 6207 | return 1; |
| 6069 | } /* luaopen__openssl_x509_store() */ | 6208 | } /* luaopen__openssl_x509_store() */ |
| @@ -6114,17 +6253,17 @@ static int stx__gc(lua_State *L) { | |||
| 6114 | } /* stx__gc() */ | 6253 | } /* stx__gc() */ |
| 6115 | 6254 | ||
| 6116 | 6255 | ||
| 6117 | static const luaL_Reg stx_methods[] = { | 6256 | static const auxL_Reg stx_methods[] = { |
| 6118 | { "add", &stx_add }, | 6257 | { "add", &stx_add }, |
| 6119 | { NULL, NULL }, | 6258 | { NULL, NULL }, |
| 6120 | }; | 6259 | }; |
| 6121 | 6260 | ||
| 6122 | static const luaL_Reg stx_metatable[] = { | 6261 | static const auxL_Reg stx_metatable[] = { |
| 6123 | { "__gc", &stx__gc }, | 6262 | { "__gc", &stx__gc }, |
| 6124 | { NULL, NULL }, | 6263 | { NULL, NULL }, |
| 6125 | }; | 6264 | }; |
| 6126 | 6265 | ||
| 6127 | static const luaL_Reg stx_globals[] = { | 6266 | static const auxL_Reg stx_globals[] = { |
| 6128 | { "new", &stx_new }, | 6267 | { "new", &stx_new }, |
| 6129 | { "interpose", &stx_interpose }, | 6268 | { "interpose", &stx_interpose }, |
| 6130 | { NULL, NULL }, | 6269 | { NULL, NULL }, |
| @@ -6133,7 +6272,7 @@ static const luaL_Reg stx_globals[] = { | |||
| 6133 | int luaopen__openssl_x509_store_context(lua_State *L) { | 6272 | int luaopen__openssl_x509_store_context(lua_State *L) { |
| 6134 | initall(L); | 6273 | initall(L); |
| 6135 | 6274 | ||
| 6136 | luaL_newlib(L, stx_globals); | 6275 | auxL_newlib(L, stx_globals, 0); |
| 6137 | 6276 | ||
| 6138 | return 1; | 6277 | return 1; |
| 6139 | } /* luaopen__openssl_x509_store_context() */ | 6278 | } /* luaopen__openssl_x509_store_context() */ |
| @@ -6234,18 +6373,18 @@ static int p12__gc(lua_State *L) { | |||
| 6234 | } /* p12__gc() */ | 6373 | } /* p12__gc() */ |
| 6235 | 6374 | ||
| 6236 | 6375 | ||
| 6237 | static const luaL_Reg p12_methods[] = { | 6376 | static const auxL_Reg p12_methods[] = { |
| 6238 | { "tostring", &p12__tostring }, | 6377 | { "tostring", &p12__tostring }, |
| 6239 | { NULL, NULL }, | 6378 | { NULL, NULL }, |
| 6240 | }; | 6379 | }; |
| 6241 | 6380 | ||
| 6242 | static const luaL_Reg p12_metatable[] = { | 6381 | static const auxL_Reg p12_metatable[] = { |
| 6243 | { "__tostring", &p12__tostring }, | 6382 | { "__tostring", &p12__tostring }, |
| 6244 | { "__gc", &p12__gc }, | 6383 | { "__gc", &p12__gc }, |
| 6245 | { NULL, NULL }, | 6384 | { NULL, NULL }, |
| 6246 | }; | 6385 | }; |
| 6247 | 6386 | ||
| 6248 | static const luaL_Reg p12_globals[] = { | 6387 | static const auxL_Reg p12_globals[] = { |
| 6249 | { "new", &p12_new }, | 6388 | { "new", &p12_new }, |
| 6250 | { "interpose", &p12_interpose }, | 6389 | { "interpose", &p12_interpose }, |
| 6251 | { NULL, NULL }, | 6390 | { NULL, NULL }, |
| @@ -6254,7 +6393,7 @@ static const luaL_Reg p12_globals[] = { | |||
| 6254 | int luaopen__openssl_pkcs12(lua_State *L) { | 6393 | int luaopen__openssl_pkcs12(lua_State *L) { |
| 6255 | initall(L); | 6394 | initall(L); |
| 6256 | 6395 | ||
| 6257 | luaL_newlib(L, p12_globals); | 6396 | auxL_newlib(L, p12_globals, 0); |
| 6258 | 6397 | ||
| 6259 | return 1; | 6398 | return 1; |
| 6260 | } /* luaopen__openssl_pkcs12() */ | 6399 | } /* luaopen__openssl_pkcs12() */ |
| @@ -6294,7 +6433,7 @@ static int sx_new(lua_State *L) { | |||
| 6294 | lua_settop(L, 2); | 6433 | lua_settop(L, 2); |
| 6295 | srv = lua_toboolean(L, 2); | 6434 | srv = lua_toboolean(L, 2); |
| 6296 | 6435 | ||
| 6297 | switch (checkoption(L, 1, "TLS", opts)) { | 6436 | switch (auxL_checkoption(L, 1, "TLS", opts, 1)) { |
| 6298 | case 0: /* SSL */ | 6437 | case 0: /* SSL */ |
| 6299 | method = (srv)? &SSLv23_server_method : &SSLv23_client_method; | 6438 | method = (srv)? &SSLv23_server_method : &SSLv23_client_method; |
| 6300 | options = SSL_OP_NO_SSLv2; | 6439 | options = SSL_OP_NO_SSLv2; |
| @@ -6350,7 +6489,7 @@ static int sx_new(lua_State *L) { | |||
| 6350 | break; | 6489 | break; |
| 6351 | #endif | 6490 | #endif |
| 6352 | default: | 6491 | default: |
| 6353 | return badoption(L, 1, NULL); | 6492 | return luaL_argerror(L, 1, "invalid option"); |
| 6354 | } | 6493 | } |
| 6355 | 6494 | ||
| 6356 | ud = prepsimple(L, SSL_CTX_CLASS); | 6495 | ud = prepsimple(L, SSL_CTX_CLASS); |
| @@ -6671,7 +6810,7 @@ static int sx__gc(lua_State *L) { | |||
| 6671 | } /* sx__gc() */ | 6810 | } /* sx__gc() */ |
| 6672 | 6811 | ||
| 6673 | 6812 | ||
| 6674 | static const luaL_Reg sx_methods[] = { | 6813 | static const auxL_Reg sx_methods[] = { |
| 6675 | { "setOptions", &sx_setOptions }, | 6814 | { "setOptions", &sx_setOptions }, |
| 6676 | { "getOptions", &sx_getOptions }, | 6815 | { "getOptions", &sx_getOptions }, |
| 6677 | { "clearOptions", &sx_clearOptions }, | 6816 | { "clearOptions", &sx_clearOptions }, |
| @@ -6691,12 +6830,12 @@ static const luaL_Reg sx_methods[] = { | |||
| 6691 | { NULL, NULL }, | 6830 | { NULL, NULL }, |
| 6692 | }; | 6831 | }; |
| 6693 | 6832 | ||
| 6694 | static const luaL_Reg sx_metatable[] = { | 6833 | static const auxL_Reg sx_metatable[] = { |
| 6695 | { "__gc", &sx__gc }, | 6834 | { "__gc", &sx__gc }, |
| 6696 | { NULL, NULL }, | 6835 | { NULL, NULL }, |
| 6697 | }; | 6836 | }; |
| 6698 | 6837 | ||
| 6699 | static const luaL_Reg sx_globals[] = { | 6838 | static const auxL_Reg sx_globals[] = { |
| 6700 | { "new", &sx_new }, | 6839 | { "new", &sx_new }, |
| 6701 | { "interpose", &sx_interpose }, | 6840 | { "interpose", &sx_interpose }, |
| 6702 | { NULL, NULL }, | 6841 | { NULL, NULL }, |
| @@ -6759,7 +6898,7 @@ static const auxL_IntegerReg sx_option[] = { | |||
| 6759 | int luaopen__openssl_ssl_context(lua_State *L) { | 6898 | int luaopen__openssl_ssl_context(lua_State *L) { |
| 6760 | initall(L); | 6899 | initall(L); |
| 6761 | 6900 | ||
| 6762 | luaL_newlib(L, sx_globals); | 6901 | auxL_newlib(L, sx_globals, 0); |
| 6763 | auxL_setintegers(L, sx_verify); | 6902 | auxL_setintegers(L, sx_verify); |
| 6764 | auxL_setintegers(L, sx_option); | 6903 | auxL_setintegers(L, sx_option); |
| 6765 | 6904 | ||
| @@ -7005,7 +7144,7 @@ static int ssl__gc(lua_State *L) { | |||
| 7005 | } /* ssl__gc() */ | 7144 | } /* ssl__gc() */ |
| 7006 | 7145 | ||
| 7007 | 7146 | ||
| 7008 | static const luaL_Reg ssl_methods[] = { | 7147 | static const auxL_Reg ssl_methods[] = { |
| 7009 | { "setOptions", &ssl_setOptions }, | 7148 | { "setOptions", &ssl_setOptions }, |
| 7010 | { "getOptions", &ssl_getOptions }, | 7149 | { "getOptions", &ssl_getOptions }, |
| 7011 | { "clearOptions", &ssl_clearOptions }, | 7150 | { "clearOptions", &ssl_clearOptions }, |
| @@ -7025,12 +7164,12 @@ static const luaL_Reg ssl_methods[] = { | |||
| 7025 | { NULL, NULL }, | 7164 | { NULL, NULL }, |
| 7026 | }; | 7165 | }; |
| 7027 | 7166 | ||
| 7028 | static const luaL_Reg ssl_metatable[] = { | 7167 | static const auxL_Reg ssl_metatable[] = { |
| 7029 | { "__gc", &ssl__gc }, | 7168 | { "__gc", &ssl__gc }, |
| 7030 | { NULL, NULL }, | 7169 | { NULL, NULL }, |
| 7031 | }; | 7170 | }; |
| 7032 | 7171 | ||
| 7033 | static const luaL_Reg ssl_globals[] = { | 7172 | static const auxL_Reg ssl_globals[] = { |
| 7034 | { "new", &ssl_new }, | 7173 | { "new", &ssl_new }, |
| 7035 | { "interpose", &ssl_interpose }, | 7174 | { "interpose", &ssl_interpose }, |
| 7036 | { NULL, NULL }, | 7175 | { NULL, NULL }, |
| @@ -7053,7 +7192,7 @@ static const auxL_IntegerReg ssl_version[] = { | |||
| 7053 | int luaopen__openssl_ssl(lua_State *L) { | 7192 | int luaopen__openssl_ssl(lua_State *L) { |
| 7054 | initall(L); | 7193 | initall(L); |
| 7055 | 7194 | ||
| 7056 | luaL_newlib(L, ssl_globals); | 7195 | auxL_newlib(L, ssl_globals, 0); |
| 7057 | auxL_setintegers(L, ssl_version); | 7196 | auxL_setintegers(L, ssl_version); |
| 7058 | auxL_setintegers(L, sx_verify); | 7197 | auxL_setintegers(L, sx_verify); |
| 7059 | auxL_setintegers(L, sx_option); | 7198 | auxL_setintegers(L, sx_option); |
| @@ -7149,18 +7288,18 @@ static int md__gc(lua_State *L) { | |||
| 7149 | } /* md__gc() */ | 7288 | } /* md__gc() */ |
| 7150 | 7289 | ||
| 7151 | 7290 | ||
| 7152 | static const luaL_Reg md_methods[] = { | 7291 | static const auxL_Reg md_methods[] = { |
| 7153 | { "update", &md_update }, | 7292 | { "update", &md_update }, |
| 7154 | { "final", &md_final }, | 7293 | { "final", &md_final }, |
| 7155 | { NULL, NULL }, | 7294 | { NULL, NULL }, |
| 7156 | }; | 7295 | }; |
| 7157 | 7296 | ||
| 7158 | static const luaL_Reg md_metatable[] = { | 7297 | static const auxL_Reg md_metatable[] = { |
| 7159 | { "__gc", &md__gc }, | 7298 | { "__gc", &md__gc }, |
| 7160 | { NULL, NULL }, | 7299 | { NULL, NULL }, |
| 7161 | }; | 7300 | }; |
| 7162 | 7301 | ||
| 7163 | static const luaL_Reg md_globals[] = { | 7302 | static const auxL_Reg md_globals[] = { |
| 7164 | { "new", &md_new }, | 7303 | { "new", &md_new }, |
| 7165 | { "interpose", &md_interpose }, | 7304 | { "interpose", &md_interpose }, |
| 7166 | { NULL, NULL }, | 7305 | { NULL, NULL }, |
| @@ -7169,7 +7308,7 @@ static const luaL_Reg md_globals[] = { | |||
| 7169 | int luaopen__openssl_digest(lua_State *L) { | 7308 | int luaopen__openssl_digest(lua_State *L) { |
| 7170 | initall(L); | 7309 | initall(L); |
| 7171 | 7310 | ||
| 7172 | luaL_newlib(L, md_globals); | 7311 | auxL_newlib(L, md_globals, 0); |
| 7173 | 7312 | ||
| 7174 | return 1; | 7313 | return 1; |
| 7175 | } /* luaopen__openssl_digest() */ | 7314 | } /* luaopen__openssl_digest() */ |
| @@ -7251,18 +7390,18 @@ static int hmac__gc(lua_State *L) { | |||
| 7251 | } /* hmac__gc() */ | 7390 | } /* hmac__gc() */ |
| 7252 | 7391 | ||
| 7253 | 7392 | ||
| 7254 | static const luaL_Reg hmac_methods[] = { | 7393 | static const auxL_Reg hmac_methods[] = { |
| 7255 | { "update", &hmac_update }, | 7394 | { "update", &hmac_update }, |
| 7256 | { "final", &hmac_final }, | 7395 | { "final", &hmac_final }, |
| 7257 | { NULL, NULL }, | 7396 | { NULL, NULL }, |
| 7258 | }; | 7397 | }; |
| 7259 | 7398 | ||
| 7260 | static const luaL_Reg hmac_metatable[] = { | 7399 | static const auxL_Reg hmac_metatable[] = { |
| 7261 | { "__gc", &hmac__gc }, | 7400 | { "__gc", &hmac__gc }, |
| 7262 | { NULL, NULL }, | 7401 | { NULL, NULL }, |
| 7263 | }; | 7402 | }; |
| 7264 | 7403 | ||
| 7265 | static const luaL_Reg hmac_globals[] = { | 7404 | static const auxL_Reg hmac_globals[] = { |
| 7266 | { "new", &hmac_new }, | 7405 | { "new", &hmac_new }, |
| 7267 | { "interpose", &hmac_interpose }, | 7406 | { "interpose", &hmac_interpose }, |
| 7268 | { NULL, NULL }, | 7407 | { NULL, NULL }, |
| @@ -7271,7 +7410,7 @@ static const luaL_Reg hmac_globals[] = { | |||
| 7271 | int luaopen__openssl_hmac(lua_State *L) { | 7410 | int luaopen__openssl_hmac(lua_State *L) { |
| 7272 | initall(L); | 7411 | initall(L); |
| 7273 | 7412 | ||
| 7274 | luaL_newlib(L, hmac_globals); | 7413 | auxL_newlib(L, hmac_globals, 0); |
| 7275 | 7414 | ||
| 7276 | return 1; | 7415 | return 1; |
| 7277 | } /* luaopen__openssl_hmac() */ | 7416 | } /* luaopen__openssl_hmac() */ |
| @@ -7452,7 +7591,7 @@ static int cipher__gc(lua_State *L) { | |||
| 7452 | } /* cipher__gc() */ | 7591 | } /* cipher__gc() */ |
| 7453 | 7592 | ||
| 7454 | 7593 | ||
| 7455 | static const luaL_Reg cipher_methods[] = { | 7594 | static const auxL_Reg cipher_methods[] = { |
| 7456 | { "encrypt", &cipher_encrypt }, | 7595 | { "encrypt", &cipher_encrypt }, |
| 7457 | { "decrypt", &cipher_decrypt }, | 7596 | { "decrypt", &cipher_decrypt }, |
| 7458 | { "update", &cipher_update }, | 7597 | { "update", &cipher_update }, |
| @@ -7460,12 +7599,12 @@ static const luaL_Reg cipher_methods[] = { | |||
| 7460 | { NULL, NULL }, | 7599 | { NULL, NULL }, |
| 7461 | }; | 7600 | }; |
| 7462 | 7601 | ||
| 7463 | static const luaL_Reg cipher_metatable[] = { | 7602 | static const auxL_Reg cipher_metatable[] = { |
| 7464 | { "__gc", &cipher__gc }, | 7603 | { "__gc", &cipher__gc }, |
| 7465 | { NULL, NULL }, | 7604 | { NULL, NULL }, |
| 7466 | }; | 7605 | }; |
| 7467 | 7606 | ||
| 7468 | static const luaL_Reg cipher_globals[] = { | 7607 | static const auxL_Reg cipher_globals[] = { |
| 7469 | { "new", &cipher_new }, | 7608 | { "new", &cipher_new }, |
| 7470 | { "interpose", &cipher_interpose }, | 7609 | { "interpose", &cipher_interpose }, |
| 7471 | { NULL, NULL }, | 7610 | { NULL, NULL }, |
| @@ -7474,7 +7613,7 @@ static const luaL_Reg cipher_globals[] = { | |||
| 7474 | int luaopen__openssl_cipher(lua_State *L) { | 7613 | int luaopen__openssl_cipher(lua_State *L) { |
| 7475 | initall(L); | 7614 | initall(L); |
| 7476 | 7615 | ||
| 7477 | luaL_newlib(L, cipher_globals); | 7616 | auxL_newlib(L, cipher_globals, 0); |
| 7478 | 7617 | ||
| 7479 | return 1; | 7618 | return 1; |
| 7480 | } /* luaopen__openssl_cipher() */ | 7619 | } /* luaopen__openssl_cipher() */ |
| @@ -7803,7 +7942,7 @@ static int rand_uniform(lua_State *L) { | |||
| 7803 | } /* rand_uniform() */ | 7942 | } /* rand_uniform() */ |
| 7804 | 7943 | ||
| 7805 | 7944 | ||
| 7806 | static const luaL_Reg rand_globals[] = { | 7945 | static const auxL_Reg rand_globals[] = { |
| 7807 | { "stir", &rand_stir }, | 7946 | { "stir", &rand_stir }, |
| 7808 | { "add", &rand_add }, | 7947 | { "add", &rand_add }, |
| 7809 | { "bytes", &rand_bytes }, | 7948 | { "bytes", &rand_bytes }, |
| @@ -7817,10 +7956,9 @@ int luaopen__openssl_rand(lua_State *L) { | |||
| 7817 | 7956 | ||
| 7818 | initall(L); | 7957 | initall(L); |
| 7819 | 7958 | ||
| 7820 | luaL_newlibtable(L, rand_globals); | ||
| 7821 | st = lua_newuserdata(L, sizeof *st); | 7959 | st = lua_newuserdata(L, sizeof *st); |
| 7822 | memset(st, 0, sizeof *st); | 7960 | memset(st, 0, sizeof *st); |
| 7823 | luaL_setfuncs(L, rand_globals, 1); | 7961 | auxL_newlib(L, rand_globals, 1); |
| 7824 | 7962 | ||
| 7825 | return 1; | 7963 | return 1; |
| 7826 | } /* luaopen__openssl_rand() */ | 7964 | } /* luaopen__openssl_rand() */ |
| @@ -7855,7 +7993,7 @@ static int de5_set_odd_parity(lua_State *L) { | |||
| 7855 | return 1; | 7993 | return 1; |
| 7856 | } /* de5_set_odd_parity() */ | 7994 | } /* de5_set_odd_parity() */ |
| 7857 | 7995 | ||
| 7858 | static const luaL_Reg des_globals[] = { | 7996 | static const auxL_Reg des_globals[] = { |
| 7859 | { "string_to_key", &de5_string_to_key }, | 7997 | { "string_to_key", &de5_string_to_key }, |
| 7860 | { "set_odd_parity", &de5_set_odd_parity }, | 7998 | { "set_odd_parity", &de5_set_odd_parity }, |
| 7861 | { NULL, NULL }, | 7999 | { NULL, NULL }, |
| @@ -7864,7 +8002,7 @@ static const luaL_Reg des_globals[] = { | |||
| 7864 | int luaopen__openssl_des(lua_State *L) { | 8002 | int luaopen__openssl_des(lua_State *L) { |
| 7865 | initall(L); | 8003 | initall(L); |
| 7866 | 8004 | ||
| 7867 | luaL_newlib(L, des_globals); | 8005 | auxL_newlib(L, des_globals, 0); |
| 7868 | 8006 | ||
| 7869 | return 1; | 8007 | return 1; |
| 7870 | } /* luaopen__openssl_des() */ | 8008 | } /* luaopen__openssl_des() */ |
| @@ -8009,24 +8147,24 @@ static void initall(lua_State *L) { | |||
| 8009 | 8147 | ||
| 8010 | ex_newstate(L); | 8148 | ex_newstate(L); |
| 8011 | 8149 | ||
| 8012 | addclass(L, BIGNUM_CLASS, bn_methods, bn_metatable); | 8150 | auxL_addclass(L, BIGNUM_CLASS, bn_methods, bn_metatable, 0); |
| 8013 | addclass(L, PKEY_CLASS, pk_methods, pk_metatable); | 8151 | pk_luainit(L, 0); |
| 8014 | #ifndef OPENSSL_NO_EC | 8152 | #ifndef OPENSSL_NO_EC |
| 8015 | addclass(L, EC_GROUP_CLASS, ecg_methods, ecg_metatable); | 8153 | auxL_addclass(L, EC_GROUP_CLASS, ecg_methods, ecg_metatable, 0); |
| 8016 | #endif | 8154 | #endif |
| 8017 | addclass(L, X509_NAME_CLASS, xn_methods, xn_metatable); | 8155 | auxL_addclass(L, X509_NAME_CLASS, xn_methods, xn_metatable, 0); |
| 8018 | addclass(L, X509_GENS_CLASS, gn_methods, gn_metatable); | 8156 | auxL_addclass(L, X509_GENS_CLASS, gn_methods, gn_metatable, 0); |
| 8019 | addclass(L, X509_EXT_CLASS, xe_methods, xe_metatable); | 8157 | auxL_addclass(L, X509_EXT_CLASS, xe_methods, xe_metatable, 0); |
| 8020 | addclass(L, X509_CERT_CLASS, xc_methods, xc_metatable); | 8158 | auxL_addclass(L, X509_CERT_CLASS, xc_methods, xc_metatable, 0); |
| 8021 | addclass(L, X509_CSR_CLASS, xr_methods, xr_metatable); | 8159 | auxL_addclass(L, X509_CSR_CLASS, xr_methods, xr_metatable, 0); |
| 8022 | addclass(L, X509_CRL_CLASS, xx_methods, xx_metatable); | 8160 | auxL_addclass(L, X509_CRL_CLASS, xx_methods, xx_metatable, 0); |
| 8023 | addclass(L, X509_CHAIN_CLASS, xl_methods, xl_metatable); | 8161 | auxL_addclass(L, X509_CHAIN_CLASS, xl_methods, xl_metatable, 0); |
| 8024 | addclass(L, X509_STORE_CLASS, xs_methods, xs_metatable); | 8162 | auxL_addclass(L, X509_STORE_CLASS, xs_methods, xs_metatable, 0); |
| 8025 | addclass(L, PKCS12_CLASS, p12_methods, p12_metatable); | 8163 | auxL_addclass(L, PKCS12_CLASS, p12_methods, p12_metatable, 0); |
| 8026 | addclass(L, SSL_CTX_CLASS, sx_methods, sx_metatable); | 8164 | auxL_addclass(L, SSL_CTX_CLASS, sx_methods, sx_metatable, 0); |
| 8027 | addclass(L, SSL_CLASS, ssl_methods, ssl_metatable); | 8165 | auxL_addclass(L, SSL_CLASS, ssl_methods, ssl_metatable, 0); |
| 8028 | addclass(L, DIGEST_CLASS, md_methods, md_metatable); | 8166 | auxL_addclass(L, DIGEST_CLASS, md_methods, md_metatable, 0); |
| 8029 | addclass(L, HMAC_CLASS, hmac_methods, hmac_metatable); | 8167 | auxL_addclass(L, HMAC_CLASS, hmac_methods, hmac_metatable, 0); |
| 8030 | addclass(L, CIPHER_CLASS, cipher_methods, cipher_metatable); | 8168 | auxL_addclass(L, CIPHER_CLASS, cipher_methods, cipher_metatable, 0); |
| 8031 | } /* initall() */ | 8169 | } /* initall() */ |
| 8032 | 8170 | ||
