summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2015-12-18 22:59:23 +1100
committerdaurnimator <quae@daurnimator.com>2015-12-21 19:32:54 +1100
commit67dca5b835148d971127a4c882a8de456cffd868 (patch)
tree40c3a612fb62f866ecfe3c6ad2810d47493ea828
parent65248290ed3a412e9ce0caa7204b1a42fc9fe192 (diff)
downloadluaossl-67dca5b835148d971127a4c882a8de456cffd868.tar.gz
luaossl-67dca5b835148d971127a4c882a8de456cffd868.tar.bz2
luaossl-67dca5b835148d971127a4c882a8de456cffd868.zip
bignum: Add shl (lshift), shr (rshift) functions
-rw-r--r--src/openssl.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/openssl.c b/src/openssl.c
index 304ff9a..a1a7c58 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -1856,6 +1856,36 @@ static int bn__pow(lua_State *L) {
1856} /* bn__pow() */ 1856} /* bn__pow() */
1857 1857
1858 1858
1859static int bn__shl(lua_State *L) {
1860 BIGNUM *r, *a;
1861 int n;
1862
1863 a = checkbig(L, 1);
1864 n = luaL_checkinteger(L, 2);
1865 r = bn_push(L);
1866
1867 if (!BN_lshift(r, a, n))
1868 return auxL_error(L, auxL_EOPENSSL, "bignum:__shl");
1869
1870 return 1;
1871} /* bn__shl() */
1872
1873
1874static int bn__shr(lua_State *L) {
1875 BIGNUM *r, *a;
1876 int n;
1877
1878 a = checkbig(L, 1);
1879 n = luaL_checkinteger(L, 2);
1880 r = bn_push(L);
1881
1882 if (!BN_rshift(r, a, n))
1883 return auxL_error(L, auxL_EOPENSSL, "bignum:__shr");
1884
1885 return 1;
1886} /* bn__shr() */
1887
1888
1859static int bn__unm(lua_State *L) { 1889static int bn__unm(lua_State *L) {
1860 BIGNUM *a = checksimple(L, 1, BIGNUM_CLASS); 1890 BIGNUM *a = checksimple(L, 1, BIGNUM_CLASS);
1861 1891
@@ -1947,6 +1977,8 @@ static const luaL_Reg bn_methods[] = {
1947 { "div", &bn__div }, 1977 { "div", &bn__div },
1948 { "mod", &bn__mod }, 1978 { "mod", &bn__mod },
1949 { "pow", &bn__pow }, 1979 { "pow", &bn__pow },
1980 { "shl", &bn__shl },
1981 { "shr", &bn__shr },
1950 { "tobin", &bn_tobin }, 1982 { "tobin", &bn_tobin },
1951 { NULL, NULL }, 1983 { NULL, NULL },
1952}; 1984};
@@ -1959,6 +1991,8 @@ static const luaL_Reg bn_metatable[] = {
1959 { "__mod", &bn__mod }, 1991 { "__mod", &bn__mod },
1960 { "__pow", &bn__pow }, 1992 { "__pow", &bn__pow },
1961 { "__unm", &bn__unm }, 1993 { "__unm", &bn__unm },
1994 { "__shl", &bn__shl },
1995 { "__shr", &bn__shr },
1962 { "__eq", &bn__eq }, 1996 { "__eq", &bn__eq },
1963 { "__lt", &bn__lt }, 1997 { "__lt", &bn__lt },
1964 { "__le", &bn__le }, 1998 { "__le", &bn__le },