Mercurial > hg > php_nacl
comparison nacl.c @ 7:a139bed53614
Fixed some compiler warnings, added support for unpatched nacl library
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Tue, 12 Jul 2011 21:26:46 +0000 |
parents | ded86f4d6275 |
children | a1fc155ca80b |
comparison
equal
deleted
inserted
replaced
6:ded86f4d6275 | 7:a139bed53614 |
---|---|
32 #include "nacl/crypto_sign_edwards25519sha512batch.h" | 32 #include "nacl/crypto_sign_edwards25519sha512batch.h" |
33 | 33 |
34 #include "php.h" | 34 #include "php.h" |
35 #include "php_ini.h" | 35 #include "php_ini.h" |
36 #include "php_nacl.h" | 36 #include "php_nacl.h" |
37 | |
38 #if !(defined crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES || defined crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES) | |
39 #include "randombytes.c" | |
40 #endif | |
37 | 41 |
38 static function_entry nacl_functions[] = { | 42 static function_entry nacl_functions[] = { |
39 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305, NULL) | 43 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305, NULL) |
40 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305_open, NULL) | 44 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305_open, NULL) |
41 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305_getpublickey, NULL) | 45 PHP_FE(nacl_crypto_box_curve25519xsalsa20poly1305_getpublickey, NULL) |
75 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_SECRETKEYBYTES", crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, CONST_CS | CONST_PERSISTENT); | 79 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_SECRETKEYBYTES", crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, CONST_CS | CONST_PERSISTENT); |
76 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_BEFORENMBYTES", crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, CONST_CS | CONST_PERSISTENT); | 80 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_BEFORENMBYTES", crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, CONST_CS | CONST_PERSISTENT); |
77 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_NONCEBYTES", crypto_box_curve25519xsalsa20poly1305_NONCEBYTES, CONST_CS | CONST_PERSISTENT); | 81 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_NONCEBYTES", crypto_box_curve25519xsalsa20poly1305_NONCEBYTES, CONST_CS | CONST_PERSISTENT); |
78 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_ZEROBYTES", crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, CONST_CS | CONST_PERSISTENT); | 82 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_ZEROBYTES", crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, CONST_CS | CONST_PERSISTENT); |
79 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_BOXZEROBYTES", crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, CONST_CS | CONST_PERSISTENT); | 83 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_BOXZEROBYTES", crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, CONST_CS | CONST_PERSISTENT); |
80 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES", crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES, CONST_CS | CONST_PERSISTENT); | |
81 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_BYTES", crypto_sign_edwards25519sha512batch_BYTES, CONST_CS | CONST_PERSISTENT); | 84 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_BYTES", crypto_sign_edwards25519sha512batch_BYTES, CONST_CS | CONST_PERSISTENT); |
82 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_PUBLICKEYBYTES", crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES, CONST_CS | CONST_PERSISTENT); | 85 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_PUBLICKEYBYTES", crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES, CONST_CS | CONST_PERSISTENT); |
83 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_SECRETKEYBYTES", crypto_sign_edwards25519sha512batch_SECRETKEYBYTES, CONST_CS | CONST_PERSISTENT); | 86 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_SECRETKEYBYTES", crypto_sign_edwards25519sha512batch_SECRETKEYBYTES, CONST_CS | CONST_PERSISTENT); |
87 #if defined crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES | |
88 REGISTER_LONG_CONSTANT("NACL_CRYPTO_BOX_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES", crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES, CONST_CS | CONST_PERSISTENT); | |
89 #endif | |
90 #if defined crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES | |
84 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_KEYPAIRRANDOMBYTES", crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES, CONST_CS | CONST_PERSISTENT); | 91 REGISTER_LONG_CONSTANT("NACL_CRYPTO_SIGN_edwards25519sha512batch_KEYPAIRRANDOMBYTES", crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES, CONST_CS | CONST_PERSISTENT); |
92 #endif | |
85 } | 93 } |
86 | 94 |
87 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *) | 95 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *) |
88 char *m, *n, *pk, *sk; | 96 unsigned char *m, *n, *pk, *sk; |
89 int lm, ln, lpk, lsk; | 97 int lm, ln, lpk, lsk; |
90 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &m, &lm, &n, &ln, &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); | 98 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &m, &lm, &n, &ln, &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); |
91 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; | 99 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; |
92 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; | 100 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; |
93 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; | 101 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; |
94 int mlen = lm + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; | 102 int mlen = lm + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; |
95 char* mb = ecalloc(mlen, 1); | 103 unsigned char* mb = ecalloc(mlen, 1); |
96 char* cb = ecalloc(mlen, 1); | 104 unsigned char* cb = ecalloc(mlen, 1); |
97 memcpy(mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, m, lm); | 105 memcpy(mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, m, lm); |
98 int ret = crypto_box_curve25519xsalsa20poly1305(cb, mb, mlen, n, pk, sk); | 106 int ret = crypto_box_curve25519xsalsa20poly1305(cb, mb, mlen, n, pk, sk); |
99 int clen = mlen - crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; | 107 int clen = mlen - crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; |
100 char* c = emalloc(clen); | 108 char* c = emalloc(clen); |
101 memcpy(c, cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, clen); | 109 memcpy(c, cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, clen); |
104 if (ret == 0) RETURN_STRINGL(c, clen, 0); | 112 if (ret == 0) RETURN_STRINGL(c, clen, 0); |
105 efree(c); | 113 efree(c); |
106 RETURN_FALSE; | 114 RETURN_FALSE; |
107 } | 115 } |
108 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_open) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *) | 116 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_open) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *) |
109 char *c, *n, *pk, *sk; | 117 unsigned char *c, *n, *pk, *sk; |
110 int lc, ln, lpk, lsk; | 118 int lc, ln, lpk, lsk; |
111 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &c, &lc, &n, &ln, &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); | 119 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &c, &lc, &n, &ln, &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); |
112 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; | 120 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; |
113 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; | 121 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; |
114 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; | 122 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; |
115 int clen = lc + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; | 123 int clen = lc + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; |
116 char* mb = ecalloc(clen, 1); | 124 unsigned char* mb = ecalloc(clen, 1); |
117 char* cb = ecalloc(clen, 1); | 125 unsigned char* cb = ecalloc(clen, 1); |
118 memcpy(cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, c, lc); | 126 memcpy(cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, c, lc); |
119 int ret = crypto_box_curve25519xsalsa20poly1305_open(mb, cb, clen, n, pk, sk); | 127 int ret = crypto_box_curve25519xsalsa20poly1305_open(mb, cb, clen, n, pk, sk); |
120 int mlen = clen - crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; | 128 int mlen = clen - crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; |
121 char* m = emalloc(mlen); | 129 char* m = emalloc(mlen); |
122 memcpy(m, mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, mlen); | 130 memcpy(m, mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, mlen); |
125 if (ret == 0) RETURN_STRINGL(m, mlen, 0); | 133 if (ret == 0) RETURN_STRINGL(m, mlen, 0); |
126 efree(m); | 134 efree(m); |
127 RETURN_FALSE; | 135 RETURN_FALSE; |
128 } | 136 } |
129 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_beforenm) { //(unsigned char *,const unsigned char *,const unsigned char *) | 137 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_beforenm) { //(unsigned char *,const unsigned char *,const unsigned char *) |
130 char *pk, *sk; | 138 unsigned char *pk, *sk; |
131 int lpk, lsk; | 139 int lpk, lsk; |
132 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); | 140 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &pk, &lpk, &sk, &lsk) == FAILURE) RETURN_NULL(); |
133 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; | 141 if (lpk != crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES) RETURN_FALSE; |
134 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; | 142 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; |
135 char* k = emalloc(crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES); | 143 unsigned char *k = emalloc(crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES); |
136 crypto_box_curve25519xsalsa20poly1305_beforenm(k, pk, sk); | 144 crypto_box_curve25519xsalsa20poly1305_beforenm(k, pk, sk); |
137 RETURN_STRINGL(k, crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, 0); | 145 RETURN_STRINGL((char*)k, crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES, 0); |
138 } | 146 } |
139 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_afternm) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *) | 147 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_afternm) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *) |
140 char *m, *n, *k; | 148 unsigned char *m, *n, *k; |
141 int lm, ln, lk; | 149 int lm, ln, lk; |
142 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &m, &lm, &n, &ln, &k, &lk) == FAILURE) RETURN_NULL(); | 150 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &m, &lm, &n, &ln, &k, &lk) == FAILURE) RETURN_NULL(); |
143 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; | 151 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; |
144 if (lk != crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES) RETURN_FALSE; | 152 if (lk != crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES) RETURN_FALSE; |
145 int mlen = lm + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; | 153 int mlen = lm + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; |
146 char* mb = ecalloc(mlen, 1); | 154 unsigned char *mb = ecalloc(mlen, 1); |
147 char* cb = ecalloc(mlen, 1); | 155 unsigned char *cb = ecalloc(mlen, 1); |
148 memcpy(mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, m, lm); | 156 memcpy(mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, m, lm); |
149 int ret = crypto_box_curve25519xsalsa20poly1305_afternm(cb, mb, mlen, n, k); | 157 int ret = crypto_box_curve25519xsalsa20poly1305_afternm(cb, mb, mlen, n, k); |
150 int clen = mlen - crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; | 158 int clen = mlen - crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; |
151 char* c = emalloc(clen); | 159 char *c = emalloc(clen); |
152 memcpy(c, cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, clen); | 160 memcpy(c, cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, clen); |
153 efree(mb); | 161 efree(mb); |
154 efree(cb); | 162 efree(cb); |
155 if (ret == 0) RETURN_STRINGL(c, clen, 0); | 163 if (ret == 0) RETURN_STRINGL(c, clen, 0); |
156 efree(c); | 164 efree(c); |
157 RETURN_FALSE; | 165 RETURN_FALSE; |
158 } | 166 } |
159 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_open_afternm) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *) | 167 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_open_afternm) { //(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *) |
160 char *c, *n, *k; | 168 unsigned char *c, *n, *k; |
161 int lc, ln, lk; | 169 int lc, ln, lk; |
162 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &c, &lc, &n, &ln, &k, &lk) == FAILURE) RETURN_NULL(); | 170 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &c, &lc, &n, &ln, &k, &lk) == FAILURE) RETURN_NULL(); |
163 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; | 171 if (ln != crypto_box_curve25519xsalsa20poly1305_NONCEBYTES) RETURN_FALSE; |
164 if (lk != crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES) RETURN_FALSE; | 172 if (lk != crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES) RETURN_FALSE; |
165 int clen = lc + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; | 173 int clen = lc + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES; |
166 char* mb = ecalloc(clen, 1); | 174 unsigned char *mb = ecalloc(clen, 1); |
167 char* cb = ecalloc(clen, 1); | 175 unsigned char *cb = ecalloc(clen, 1); |
168 memcpy(cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, c, lc); | 176 memcpy(cb + crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES, c, lc); |
169 int ret = crypto_box_curve25519xsalsa20poly1305_open_afternm(mb, cb, clen, n, k); | 177 int ret = crypto_box_curve25519xsalsa20poly1305_open_afternm(mb, cb, clen, n, k); |
170 int mlen = clen - crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; | 178 int mlen = clen - crypto_box_curve25519xsalsa20poly1305_ZEROBYTES; |
171 char* m = emalloc(mlen); | 179 char *m = emalloc(mlen); |
172 memcpy(m, mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, mlen); | 180 memcpy(m, mb + crypto_box_curve25519xsalsa20poly1305_ZEROBYTES, mlen); |
173 efree(mb); | 181 efree(mb); |
174 efree(cb); | 182 efree(cb); |
175 if (ret == 0) RETURN_STRINGL(m, mlen, 0); | 183 if (ret == 0) RETURN_STRINGL(m, mlen, 0); |
176 efree(m); | 184 efree(m); |
177 RETURN_FALSE; | 185 RETURN_FALSE; |
178 } | 186 } |
179 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_getpublickey) { | 187 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_getpublickey) { |
180 char base[32] = {9}; | 188 unsigned char base[32] = {9}; |
181 char *sk; | 189 unsigned char *sk; |
182 int lsk; | 190 int lsk; |
183 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &sk, &lsk) == FAILURE) RETURN_NULL(); | 191 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &sk, &lsk) == FAILURE) RETURN_NULL(); |
184 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; | 192 if (lsk != crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES) RETURN_FALSE; |
185 char* pk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); | 193 unsigned char* pk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); |
186 crypto_scalarmult_curve25519(pk, sk, base); | 194 crypto_scalarmult_curve25519(pk, sk, base); |
187 RETURN_STRINGL(pk, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 0); | 195 RETURN_STRINGL((char*)pk, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 0); |
188 } | 196 } |
189 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_keypair) { | 197 PHP_FUNCTION(nacl_crypto_box_curve25519xsalsa20poly1305_keypair) { |
190 char *rb; | 198 unsigned char *rb; |
191 int lrb; | 199 int lrb; |
192 zval *zsk; | 200 zval *zsk; |
201 #if defined crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES | |
193 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL(); | 202 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL(); |
194 if (!zsk) RETURN_FALSE; | 203 if (!zsk) RETURN_FALSE; |
195 if (lrb != crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES) RETURN_FALSE; | 204 if (lrb != crypto_box_curve25519xsalsa20poly1305_KEYPAIRRANDOMBYTES) RETURN_FALSE; |
196 char *spk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); | 205 unsigned char *spk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); |
197 char *ssk = emalloc(crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); | 206 unsigned char *ssk = emalloc(crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); |
198 int ret = crypto_box_curve25519xsalsa20poly1305_keypair(spk, ssk, rb); | 207 int ret = crypto_box_curve25519xsalsa20poly1305_keypair(spk, ssk, rb); |
208 #else | |
209 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL(); | |
210 if (!zsk) RETURN_FALSE; | |
211 unsigned char *spk = emalloc(crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES); | |
212 unsigned char *ssk = emalloc(crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES); | |
213 int ret = crypto_box_curve25519xsalsa20poly1305_keypair(spk, ssk); | |
214 #endif | |
199 if (ret) RETURN_FALSE; | 215 if (ret) RETURN_FALSE; |
200 zval_dtor(zsk); | 216 zval_dtor(zsk); |
201 ZVAL_STRINGL(zsk, ssk, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, 0); | 217 ZVAL_STRINGL(zsk, (char*)ssk, crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES, 0); |
202 RETURN_STRINGL(spk, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 0); | 218 RETURN_STRINGL((char*)spk, crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES, 0); |
203 } | 219 } |
204 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch) { //(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); | 220 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch) { //(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); |
205 char *m, *sk; | 221 unsigned char *m, *sk; |
206 int lm, lsk; | 222 int lm, lsk; |
207 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &m, &lm, &sk, &lsk) == FAILURE) RETURN_NULL(); | 223 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &m, &lm, &sk, &lsk) == FAILURE) RETURN_NULL(); |
208 if (lsk != crypto_sign_edwards25519sha512batch_SECRETKEYBYTES) RETURN_FALSE; | 224 if (lsk != crypto_sign_edwards25519sha512batch_SECRETKEYBYTES) RETURN_FALSE; |
209 int smlen = lm + crypto_sign_edwards25519sha512batch_BYTES; | 225 long long unsigned int smlen = lm + crypto_sign_edwards25519sha512batch_BYTES; |
210 char* smb = emalloc(smlen); | 226 unsigned char* smb = emalloc(smlen); |
211 int ret = crypto_sign_edwards25519sha512batch(smb, &smlen, m, lm, sk); | 227 int ret = crypto_sign_edwards25519sha512batch(smb, &smlen, m, lm, sk); |
212 char* sm = emalloc(smlen); | 228 char* sm = emalloc(smlen); |
213 memcpy(sm, smb, smlen); | 229 memcpy(sm, smb, smlen); |
214 efree(smb); | 230 efree(smb); |
215 if (ret == 0) RETURN_STRINGL(sm, smlen, 0); | 231 if (ret == 0) RETURN_STRINGL(sm, smlen, 0); |
216 efree(sm); | 232 efree(sm); |
217 RETURN_FALSE; | 233 RETURN_FALSE; |
218 } | 234 } |
219 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch_open) { //(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); | 235 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch_open) { //(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); |
220 char *sm, *pk; | 236 unsigned char *sm, *pk; |
221 int lsm, lpk; | 237 int lsm, lpk; |
222 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &sm, &lsm, &pk, &lpk) == FAILURE) RETURN_NULL(); | 238 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &sm, &lsm, &pk, &lpk) == FAILURE) RETURN_NULL(); |
223 if (lpk != crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES) RETURN_FALSE; | 239 if (lpk != crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES) RETURN_FALSE; |
224 int mlen = lsm; | 240 long long unsigned int mlen = lsm; |
225 char* mb = emalloc(mlen); | 241 unsigned char* mb = emalloc(mlen); |
226 int ret = crypto_sign_edwards25519sha512batch_open(mb, &mlen, sm, lsm, pk); | 242 int ret = crypto_sign_edwards25519sha512batch_open(mb, &mlen, sm, lsm, pk); |
227 char* m = emalloc(mlen); | 243 char* m = emalloc(mlen); |
228 memcpy(m, mb, mlen); | 244 memcpy(m, mb, mlen); |
229 efree(mb); | 245 efree(mb); |
230 if (ret == 0) RETURN_STRINGL(m, mlen, 0); | 246 if (ret == 0) RETURN_STRINGL(m, mlen, 0); |
231 efree(m); | 247 efree(m); |
232 RETURN_FALSE; | 248 RETURN_FALSE; |
233 } | 249 } |
234 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch_keypair) { //(unsigned char *,unsigned char *); | 250 PHP_FUNCTION(nacl_crypto_sign_edwards25519sha512batch_keypair) { //(unsigned char *,unsigned char *); |
235 char *rb; | 251 unsigned char *rb; |
236 int lrb; | 252 int lrb; |
237 zval *zsk; | 253 zval *zsk; |
254 #if defined crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES | |
238 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL(); | 255 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL(); |
239 if (lrb != crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES) RETURN_FALSE; | 256 if (lrb != crypto_sign_edwards25519sha512batch_KEYPAIRRANDOMBYTES) RETURN_FALSE; |
240 if (!zsk) RETURN_FALSE; | 257 if (!zsk) RETURN_FALSE; |
241 char *spk = emalloc(crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES); | 258 unsigned char *spk = emalloc(crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES); |
242 char *ssk = emalloc(crypto_sign_edwards25519sha512batch_SECRETKEYBYTES); | 259 unsigned char *ssk = emalloc(crypto_sign_edwards25519sha512batch_SECRETKEYBYTES); |
243 int ret = crypto_sign_edwards25519sha512batch_keypair(spk, ssk, rb); | 260 int ret = crypto_sign_edwards25519sha512batch_keypair(spk, ssk, rb); |
261 #else | |
262 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|s", &zsk, &rb, &lrb) == FAILURE) RETURN_NULL(); | |
263 if (!zsk) RETURN_FALSE; | |
264 unsigned char *spk = emalloc(crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES); | |
265 unsigned char *ssk = emalloc(crypto_sign_edwards25519sha512batch_SECRETKEYBYTES); | |
266 int ret = crypto_sign_edwards25519sha512batch_keypair(spk, ssk); | |
267 #endif | |
244 if (ret) RETURN_FALSE; | 268 if (ret) RETURN_FALSE; |
245 zval_dtor(zsk); | 269 zval_dtor(zsk); |
246 ZVAL_STRINGL(zsk, ssk, crypto_sign_edwards25519sha512batch_SECRETKEYBYTES, 0); | 270 ZVAL_STRINGL(zsk, (char*)ssk, crypto_sign_edwards25519sha512batch_SECRETKEYBYTES, 0); |
247 RETURN_STRINGL(spk, crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES, 0); | 271 RETURN_STRINGL((char*)spk, crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES, 0); |
248 } | 272 } |