aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2019-01-01 15:40:43 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2019-01-01 15:40:43 +0100
commit37bdd8f8cb19b674485be1dec6e8ac96d930c87f (patch)
treefe87b58c5a4c0e5600a14f7ede335c747344f85d
parent51b510a480b99d480bcf6919b8bae16eb1c61718 (diff)
downloadbusybox-w32-37bdd8f8cb19b674485be1dec6e8ac96d930c87f.tar.gz
busybox-w32-37bdd8f8cb19b674485be1dec6e8ac96d930c87f.tar.bz2
busybox-w32-37bdd8f8cb19b674485be1dec6e8ac96d930c87f.zip
tls: pstm code shrink
Optimize ABI calling convention and "dead code" cases where return value is known to be always "success". function old new delta pstm_mod 113 1227 +1114 pstm_exptmod 1463 1532 +69 pstm_montgomery_reduce 381 393 +12 pstm_sqr_comba 478 487 +9 pstm_mul_comba 447 452 +5 der_binary_to_pstm 42 45 +3 pstm_count_bits 48 46 -2 pstm_clear 72 70 -2 pstm_clamp 57 55 -2 pstm_zero 38 34 -4 pstm_init_size 46 42 -4 pstm_init_for_read_unsigned_bin 24 20 -4 pstm_grow 72 68 -4 pstm_unsigned_bin_size 37 32 -5 pstm_cmp_mag 78 72 -6 pstm_copy 92 84 -8 pstm_mul_d 224 215 -9 pstm_rshd 104 94 -10 pstm_mul_2 156 146 -10 tls_handshake 2085 2072 -13 psRsaEncryptPub 421 408 -13 pstm_lshd 109 95 -14 pstm_cmp 54 39 -15 s_pstm_sub 228 212 -16 pstm_init_copy 72 52 -20 pstm_read_unsigned_bin 109 88 -21 pstm_mulmod 120 99 -21 s_pstm_add 337 314 -23 pstm_add 108 84 -24 pstm_mul_2d 186 161 -25 pstm_sub 102 74 -28 pstm_to_unsigned_bin 151 120 -31 pstm_set 34 - -34 pstm_div_2d 409 373 -36 pstm_init 42 - -42 pstm_exch 50 - -50 pstm_montgomery_setup 89 - -89 pstm_2expt 96 - -96 pstm_montgomery_calc_normalization 140 - -140 pstm_div 1522 - -1522 ------------------------------------------------------------------------------ (add/remove: 0/7 grow/shrink: 6/27 up/down: 1212/-2343) Total: -1131 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/tls_pstm.c109
-rw-r--r--networking/tls_pstm.h86
-rw-r--r--networking/tls_pstm_montgomery_reduce.c2
-rw-r--r--networking/tls_pstm_mul_comba.c2
-rw-r--r--networking/tls_pstm_sqr_comba.c2
-rw-r--r--networking/tls_rsa.c4
6 files changed, 126 insertions, 79 deletions
diff --git a/networking/tls_pstm.c b/networking/tls_pstm.c
index e12e6c9d4..e5544ab11 100644
--- a/networking/tls_pstm.c
+++ b/networking/tls_pstm.c
@@ -47,13 +47,18 @@
47//#include "../cryptoApi.h" 47//#include "../cryptoApi.h"
48#ifndef DISABLE_PSTM 48#ifndef DISABLE_PSTM
49 49
50#undef pstm_mul_2d
50static int32 pstm_mul_2d(pstm_int *a, int b, pstm_int *c); //bbox: was int16 b 51static int32 pstm_mul_2d(pstm_int *a, int b, pstm_int *c); //bbox: was int16 b
52#define pstm_mul_2d(a, b, c) (pstm_mul_2d(a, b, c), PSTM_OKAY)
51 53
52/******************************************************************************/ 54/******************************************************************************/
53/* 55/*
54 init an pstm_int for a given size 56 init an pstm_int for a given size
55 */ 57 */
56int32 pstm_init_size(psPool_t *pool, pstm_int * a, uint32 size) 58#undef pstm_init_size
59#define pstm_init_size(pool, a, size) \
60 pstm_init_size( a, size)
61int32 FAST_FUNC pstm_init_size(psPool_t *pool, pstm_int * a, uint32 size)
57{ 62{
58//bbox 63//bbox
59// uint16 x; 64// uint16 x;
@@ -75,12 +80,17 @@ int32 pstm_init_size(psPool_t *pool, pstm_int * a, uint32 size)
75// } 80// }
76 return PSTM_OKAY; 81 return PSTM_OKAY;
77} 82}
83#undef pstm_init_size
84#define pstm_init_size(pool, a, size) (pstm_init_size(a, size), PSTM_OKAY)
78 85
79/******************************************************************************/ 86/******************************************************************************/
80/* 87/*
81 Init a new pstm_int. 88 Init a new pstm_int.
82*/ 89*/
83int32 pstm_init(psPool_t *pool, pstm_int * a) 90#undef pstm_init
91#define pstm_init(pool, a) \
92 pstm_init( a)
93static int32 pstm_init(psPool_t *pool, pstm_int * a)
84{ 94{
85//bbox 95//bbox
86// int32 i; 96// int32 i;
@@ -106,12 +116,15 @@ int32 pstm_init(psPool_t *pool, pstm_int * a)
106 116
107 return PSTM_OKAY; 117 return PSTM_OKAY;
108} 118}
119#undef pstm_init
120#define pstm_init(pool, a) (pstm_init(a), PSTM_OKAY)
109 121
110/******************************************************************************/ 122/******************************************************************************/
111/* 123/*
112 Grow as required 124 Grow as required
113 */ 125 */
114int32 pstm_grow(pstm_int * a, int size) 126#undef pstm_grow
127int32 FAST_FUNC pstm_grow(pstm_int * a, int size)
115{ 128{
116 int i; //bbox: was int16 129 int i; //bbox: was int16
117 pstm_digit *tmp; 130 pstm_digit *tmp;
@@ -142,11 +155,13 @@ int32 pstm_grow(pstm_int * a, int size)
142 } 155 }
143 return PSTM_OKAY; 156 return PSTM_OKAY;
144} 157}
158#define pstm_grow(a, size) (pstm_grow(a, size), PSTM_OKAY)
145 159
146/******************************************************************************/ 160/******************************************************************************/
147/* 161/*
148 copy, b = a (b must be pre-allocated) 162 copy, b = a (b must be pre-allocated)
149 */ 163 */
164#undef pstm_copy
150int32 pstm_copy(pstm_int * a, pstm_int * b) 165int32 pstm_copy(pstm_int * a, pstm_int * b)
151{ 166{
152 int32 res, n; 167 int32 res, n;
@@ -195,6 +210,7 @@ int32 pstm_copy(pstm_int * a, pstm_int * b)
195 b->sign = a->sign; 210 b->sign = a->sign;
196 return PSTM_OKAY; 211 return PSTM_OKAY;
197} 212}
213#define pstm_copy(a, b) (pstm_copy(a, b), PSTM_OKAY)
198 214
199/******************************************************************************/ 215/******************************************************************************/
200/* 216/*
@@ -204,7 +220,7 @@ int32 pstm_copy(pstm_int * a, pstm_int * b)
204 leading "used" digit will be non-zero. Typically very fast. Also fixes 220 leading "used" digit will be non-zero. Typically very fast. Also fixes
205 the sign if there are no more leading digits 221 the sign if there are no more leading digits
206*/ 222*/
207void pstm_clamp(pstm_int * a) 223void FAST_FUNC pstm_clamp(pstm_int * a)
208{ 224{
209/* decrease used while the most significant digit is zero. */ 225/* decrease used while the most significant digit is zero. */
210 while (a->used > 0 && a->dp[a->used - 1] == 0) { 226 while (a->used > 0 && a->dp[a->used - 1] == 0) {
@@ -220,7 +236,7 @@ void pstm_clamp(pstm_int * a)
220/* 236/*
221 clear one (frees). 237 clear one (frees).
222 */ 238 */
223void pstm_clear(pstm_int * a) 239void FAST_FUNC pstm_clear(pstm_int * a)
224{ 240{
225 int32 i; 241 int32 i;
226/* 242/*
@@ -248,6 +264,7 @@ void pstm_clear(pstm_int * a)
248/* 264/*
249 clear many (frees). 265 clear many (frees).
250 */ 266 */
267#if 0 //UNUSED
251void pstm_clear_multi(pstm_int *mp0, pstm_int *mp1, pstm_int *mp2, 268void pstm_clear_multi(pstm_int *mp0, pstm_int *mp1, pstm_int *mp2,
252 pstm_int *mp3, pstm_int *mp4, pstm_int *mp5, 269 pstm_int *mp3, pstm_int *mp4, pstm_int *mp5,
253 pstm_int *mp6, pstm_int *mp7) 270 pstm_int *mp6, pstm_int *mp7)
@@ -272,12 +289,13 @@ void pstm_clear_multi(pstm_int *mp0, pstm_int *mp1, pstm_int *mp2,
272 } 289 }
273 } 290 }
274} 291}
292#endif
275 293
276/******************************************************************************/ 294/******************************************************************************/
277/* 295/*
278 Set to zero. 296 Set to zero.
279 */ 297 */
280void pstm_zero(pstm_int * a) 298static void pstm_zero(pstm_int * a)
281{ 299{
282 int32 n; 300 int32 n;
283 pstm_digit *tmp; 301 pstm_digit *tmp;
@@ -296,7 +314,7 @@ void pstm_zero(pstm_int * a)
296/* 314/*
297 Compare maginitude of two ints (unsigned). 315 Compare maginitude of two ints (unsigned).
298 */ 316 */
299int32 pstm_cmp_mag(pstm_int * a, pstm_int * b) 317int32 FAST_FUNC pstm_cmp_mag(pstm_int * a, pstm_int * b)
300{ 318{
301 int n; //bbox: was int16 319 int n; //bbox: was int16
302 pstm_digit *tmpa, *tmpb; 320 pstm_digit *tmpa, *tmpb;
@@ -336,7 +354,7 @@ int32 pstm_cmp_mag(pstm_int * a, pstm_int * b)
336/* 354/*
337 Compare two ints (signed) 355 Compare two ints (signed)
338 */ 356 */
339int32 pstm_cmp(pstm_int * a, pstm_int * b) 357int32 FAST_FUNC pstm_cmp(pstm_int * a, pstm_int * b)
340{ 358{
341/* 359/*
342 compare based on sign 360 compare based on sign
@@ -364,7 +382,7 @@ int32 pstm_cmp(pstm_int * a, pstm_int * b)
364 pstm_ints can be initialized more precisely when they will populated 382 pstm_ints can be initialized more precisely when they will populated
365 using pstm_read_unsigned_bin since the length of the byte stream is known 383 using pstm_read_unsigned_bin since the length of the byte stream is known
366*/ 384*/
367int32 pstm_init_for_read_unsigned_bin(psPool_t *pool, pstm_int *a, uint32 len) 385int32 FAST_FUNC pstm_init_for_read_unsigned_bin(psPool_t *pool, pstm_int *a, uint32 len)
368{ 386{
369 int32 size; 387 int32 size;
370/* 388/*
@@ -385,7 +403,7 @@ int32 pstm_init_for_read_unsigned_bin(psPool_t *pool, pstm_int *a, uint32 len)
385 called pstm_init_for_read_unsigned_bin first. There is some grow logic 403 called pstm_init_for_read_unsigned_bin first. There is some grow logic
386 here if the default pstm_init was used but we don't really want to hit it. 404 here if the default pstm_init was used but we don't really want to hit it.
387*/ 405*/
388int32 pstm_read_unsigned_bin(pstm_int *a, unsigned char *b, int32 c) 406int32 FAST_FUNC pstm_read_unsigned_bin(pstm_int *a, unsigned char *b, int32 c)
389{ 407{
390 /* zero the int */ 408 /* zero the int */
391 pstm_zero (a); 409 pstm_zero (a);
@@ -460,7 +478,7 @@ int32 pstm_read_unsigned_bin(pstm_int *a, unsigned char *b, int32 c)
460/******************************************************************************/ 478/******************************************************************************/
461/* 479/*
462*/ 480*/
463int pstm_count_bits (pstm_int * a) 481static int pstm_count_bits(pstm_int * a)
464{ 482{
465 int r; //bbox: was int16 483 int r; //bbox: was int16
466 pstm_digit q; 484 pstm_digit q;
@@ -482,14 +500,14 @@ int pstm_count_bits (pstm_int * a)
482} 500}
483 501
484/******************************************************************************/ 502/******************************************************************************/
485int32 pstm_unsigned_bin_size(pstm_int *a) 503int32 FAST_FUNC pstm_unsigned_bin_size(pstm_int *a)
486{ 504{
487 int32 size = pstm_count_bits (a); 505 int32 size = pstm_count_bits (a);
488 return (size / 8 + ((size & 7) != 0 ? 1 : 0)); 506 return (size / 8 + ((size & 7) != 0 ? 1 : 0));
489} 507}
490 508
491/******************************************************************************/ 509/******************************************************************************/
492void pstm_set(pstm_int *a, pstm_digit b) 510static void pstm_set(pstm_int *a, pstm_digit b)
493{ 511{
494 pstm_zero(a); 512 pstm_zero(a);
495 a->dp[0] = b; 513 a->dp[0] = b;
@@ -500,7 +518,7 @@ void pstm_set(pstm_int *a, pstm_digit b)
500/* 518/*
501 Right shift 519 Right shift
502*/ 520*/
503void pstm_rshd(pstm_int *a, int x) 521static void pstm_rshd(pstm_int *a, int x)
504{ 522{
505 int y; //bbox: was int16 523 int y; //bbox: was int16
506 524
@@ -529,7 +547,8 @@ void pstm_rshd(pstm_int *a, int x)
529/* 547/*
530 Shift left a certain amount of digits. 548 Shift left a certain amount of digits.
531 */ 549 */
532int32 pstm_lshd(pstm_int * a, int b) 550#undef pstm_lshd
551static int32 pstm_lshd(pstm_int * a, int b)
533{ 552{
534 int x; //bbox: was int16 553 int x; //bbox: was int16
535 int32 res; 554 int32 res;
@@ -577,12 +596,13 @@ int32 pstm_lshd(pstm_int * a, int b)
577 } 596 }
578 return PSTM_OKAY; 597 return PSTM_OKAY;
579} 598}
599#define pstm_lshd(a, b) (pstm_lshd(a, b), PSTM_OKAY)
580 600
581/******************************************************************************/ 601/******************************************************************************/
582/* 602/*
583 computes a = 2**b 603 computes a = 2**b
584*/ 604*/
585int32 pstm_2expt(pstm_int *a, int b) 605static int32 pstm_2expt(pstm_int *a, int b)
586{ 606{
587 int z; //bbox: was int16 607 int z; //bbox: was int16
588 608
@@ -616,7 +636,7 @@ int32 pstm_2expt(pstm_int *a, int b)
616/* 636/*
617 637
618*/ 638*/
619int32 pstm_mul_2(pstm_int * a, pstm_int * b) 639int32 FAST_FUNC pstm_mul_2(pstm_int * a, pstm_int * b)
620{ 640{
621 int32 res; 641 int32 res;
622 int x, oldused; //bbox: was int16 642 int x, oldused; //bbox: was int16
@@ -682,7 +702,7 @@ int32 pstm_mul_2(pstm_int * a, pstm_int * b)
682/* 702/*
683 unsigned subtraction ||a|| >= ||b|| ALWAYS! 703 unsigned subtraction ||a|| >= ||b|| ALWAYS!
684*/ 704*/
685int32 s_pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c) 705int32 FAST_FUNC s_pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c)
686{ 706{
687 int oldbused, oldused; //bbox: was int16 707 int oldbused, oldused; //bbox: was int16
688 int32 x; 708 int32 x;
@@ -779,7 +799,7 @@ static int32 s_pstm_add(pstm_int *a, pstm_int *b, pstm_int *c)
779/* 799/*
780 800
781*/ 801*/
782int32 pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c) 802int32 FAST_FUNC pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c)
783{ 803{
784 int32 res; 804 int32 res;
785 int sa, sb; //bbox: was int16 805 int sa, sb; //bbox: was int16
@@ -824,6 +844,7 @@ int32 pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c)
824/* 844/*
825 c = a - b 845 c = a - b
826*/ 846*/
847#if 0 //UNUSED
827int32 pstm_sub_d(psPool_t *pool, pstm_int *a, pstm_digit b, pstm_int *c) 848int32 pstm_sub_d(psPool_t *pool, pstm_int *a, pstm_digit b, pstm_int *c)
828{ 849{
829 pstm_int tmp; 850 pstm_int tmp;
@@ -837,12 +858,13 @@ int32 pstm_sub_d(psPool_t *pool, pstm_int *a, pstm_digit b, pstm_int *c)
837 pstm_clear(&tmp); 858 pstm_clear(&tmp);
838 return res; 859 return res;
839} 860}
861#endif
840 862
841/******************************************************************************/ 863/******************************************************************************/
842/* 864/*
843 setups the montgomery reduction 865 setups the montgomery reduction
844*/ 866*/
845int32 pstm_montgomery_setup(pstm_int *a, pstm_digit *rho) 867static int32 pstm_montgomery_setup(pstm_int *a, pstm_digit *rho)
846{ 868{
847 pstm_digit x, b; 869 pstm_digit x, b;
848 870
@@ -878,7 +900,7 @@ int32 pstm_montgomery_setup(pstm_int *a, pstm_digit *rho)
878 * computes a = B**n mod b without division or multiplication useful for 900 * computes a = B**n mod b without division or multiplication useful for
879 * normalizing numbers in a Montgomery system. 901 * normalizing numbers in a Montgomery system.
880 */ 902 */
881int32 pstm_montgomery_calc_normalization(pstm_int *a, pstm_int *b) 903static int32 pstm_montgomery_calc_normalization(pstm_int *a, pstm_int *b)
882{ 904{
883 int32 x; 905 int32 x;
884 int bits; //bbox: was int16 906 int bits; //bbox: was int16
@@ -916,6 +938,7 @@ int32 pstm_montgomery_calc_normalization(pstm_int *a, pstm_int *b)
916/* 938/*
917 c = a * 2**d 939 c = a * 2**d
918*/ 940*/
941#undef pstm_mul_2d
919static int32 pstm_mul_2d(pstm_int *a, int b, pstm_int *c) 942static int32 pstm_mul_2d(pstm_int *a, int b, pstm_int *c)
920{ 943{
921 pstm_digit carry, carrytmp, shift; 944 pstm_digit carry, carrytmp, shift;
@@ -956,11 +979,13 @@ static int32 pstm_mul_2d(pstm_int *a, int b, pstm_int *c)
956 pstm_clamp(c); 979 pstm_clamp(c);
957 return PSTM_OKAY; 980 return PSTM_OKAY;
958} 981}
982#define pstm_mul_2d(a, b, c) (pstm_mul_2d(a, b, c), PSTM_OKAY)
959 983
960/******************************************************************************/ 984/******************************************************************************/
961/* 985/*
962 c = a mod 2**d 986 c = a mod 2**d
963*/ 987*/
988#undef pstm_mod_2d
964static int32 pstm_mod_2d(pstm_int *a, int b, pstm_int *c) //bbox: was int16 b 989static int32 pstm_mod_2d(pstm_int *a, int b, pstm_int *c) //bbox: was int16 b
965{ 990{
966 int x; //bbox: was int16 991 int x; //bbox: was int16
@@ -991,13 +1016,15 @@ static int32 pstm_mod_2d(pstm_int *a, int b, pstm_int *c) //bbox: was int16 b
991 pstm_clamp (c); 1016 pstm_clamp (c);
992 return PSTM_OKAY; 1017 return PSTM_OKAY;
993} 1018}
1019#define pstm_mod_2d(a, b, c) (pstm_mod_2d(a, b, c), PSTM_OKAY)
994 1020
995 1021
996/******************************************************************************/ 1022/******************************************************************************/
997/* 1023/*
998 c = a * b 1024 c = a * b
999*/ 1025*/
1000int32 pstm_mul_d(pstm_int *a, pstm_digit b, pstm_int *c) 1026#undef pstm_mul_d
1027static int32 pstm_mul_d(pstm_int *a, pstm_digit b, pstm_int *c)
1001{ 1028{
1002 pstm_word w; 1029 pstm_word w;
1003 int32 res; 1030 int32 res;
@@ -1027,12 +1054,16 @@ int32 pstm_mul_d(pstm_int *a, pstm_digit b, pstm_int *c)
1027 pstm_clamp(c); 1054 pstm_clamp(c);
1028 return PSTM_OKAY; 1055 return PSTM_OKAY;
1029} 1056}
1057#define pstm_mul_d(a, b, c) (pstm_mul_d(a, b, c), PSTM_OKAY)
1030 1058
1031/******************************************************************************/ 1059/******************************************************************************/
1032/* 1060/*
1033 c = a / 2**b 1061 c = a / 2**b
1034*/ 1062*/
1035int32 pstm_div_2d(psPool_t *pool, pstm_int *a, int b, pstm_int *c, 1063#undef pstm_div_2d
1064#define pstm_div_2d(pool, a, b, c, d) \
1065 pstm_div_2d( a, b, c, d)
1066static int32 pstm_div_2d(psPool_t *pool, pstm_int *a, int b, pstm_int *c,
1036 pstm_int *d) 1067 pstm_int *d)
1037{ 1068{
1038 pstm_digit D, r, rr; 1069 pstm_digit D, r, rr;
@@ -1113,11 +1144,14 @@ LBL_DONE:
1113 } 1144 }
1114 return res; 1145 return res;
1115} 1146}
1147#undef pstm_div_2d
1148#define pstm_div_2d(pool, a, b, c, d) (pstm_div_2d(a, b, c, d), PSTM_OKAY)
1116 1149
1117/******************************************************************************/ 1150/******************************************************************************/
1118/* 1151/*
1119 b = a/2 1152 b = a/2
1120*/ 1153*/
1154#if 0 //UNUSED
1121int32 pstm_div_2(pstm_int * a, pstm_int * b) 1155int32 pstm_div_2(pstm_int * a, pstm_int * b)
1122{ 1156{
1123 int x, oldused; //bbox: was int16 1157 int x, oldused; //bbox: was int16
@@ -1161,12 +1195,16 @@ int32 pstm_div_2(pstm_int * a, pstm_int * b)
1161 pstm_clamp (b); 1195 pstm_clamp (b);
1162 return PSTM_OKAY; 1196 return PSTM_OKAY;
1163} 1197}
1198#endif
1164 1199
1165/******************************************************************************/ 1200/******************************************************************************/
1166/* 1201/*
1167 Creates "a" then copies b into it 1202 Creates "a" then copies b into it
1168 */ 1203 */
1169int32 pstm_init_copy(psPool_t *pool, pstm_int * a, pstm_int * b, int toSqr) 1204#undef pstm_init_copy
1205#define pstm_init_copy(pool, a, b, toSqr) \
1206 pstm_init_copy( a, b, toSqr)
1207static int32 pstm_init_copy(psPool_t *pool, pstm_int * a, pstm_int * b, int toSqr)
1170{ 1208{
1171 int x; //bbox: was int16 1209 int x; //bbox: was int16
1172 int32 res; 1210 int32 res;
@@ -1191,6 +1229,8 @@ int32 pstm_init_copy(psPool_t *pool, pstm_int * a, pstm_int * b, int toSqr)
1191 } 1229 }
1192 return pstm_copy(b, a); 1230 return pstm_copy(b, a);
1193} 1231}
1232#undef pstm_init_copy
1233#define pstm_init_copy(pool, a, b, toSqr) (pstm_init_copy(a, b, toSqr), PSTM_OKAY)
1194 1234
1195/******************************************************************************/ 1235/******************************************************************************/
1196/* 1236/*
@@ -1274,7 +1314,7 @@ static uint64 psDiv128(uint128 *numerator, uint64 denominator)
1274/* 1314/*
1275 a/b => cb + d == a 1315 a/b => cb + d == a
1276*/ 1316*/
1277int32 pstm_div(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c, 1317static int32 pstm_div(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c,
1278 pstm_int *d) 1318 pstm_int *d)
1279{ 1319{
1280 pstm_int q, x, y, t1, t2; 1320 pstm_int q, x, y, t1, t2;
@@ -1487,7 +1527,7 @@ LBL_T1:pstm_clear (&t1);
1487 Swap the elements of two integers, for cases where you can't simply swap 1527 Swap the elements of two integers, for cases where you can't simply swap
1488 the pstm_int pointers around 1528 the pstm_int pointers around
1489*/ 1529*/
1490void pstm_exch(pstm_int * a, pstm_int * b) 1530static void pstm_exch(pstm_int * a, pstm_int * b)
1491{ 1531{
1492 pstm_int t; 1532 pstm_int t;
1493 1533
@@ -1500,7 +1540,7 @@ void pstm_exch(pstm_int * a, pstm_int * b)
1500/* 1540/*
1501 c = a mod b, 0 <= c < b 1541 c = a mod b, 0 <= c < b
1502*/ 1542*/
1503int32 pstm_mod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c) 1543static int32 pstm_mod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c)
1504{ 1544{
1505 pstm_int t; 1545 pstm_int t;
1506 int32 err; 1546 int32 err;
@@ -1527,7 +1567,7 @@ int32 pstm_mod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c)
1527/* 1567/*
1528 d = a * b (mod c) 1568 d = a * b (mod c)
1529*/ 1569*/
1530int32 pstm_mulmod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c, 1570int32 FAST_FUNC pstm_mulmod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c,
1531 pstm_int *d) 1571 pstm_int *d)
1532{ 1572{
1533 int32 res; 1573 int32 res;
@@ -1560,7 +1600,7 @@ int32 pstm_mulmod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c,
1560 * y = g**x (mod b) 1600 * y = g**x (mod b)
1561 * Some restrictions... x must be positive and < b 1601 * Some restrictions... x must be positive and < b
1562 */ 1602 */
1563int32 pstm_exptmod(psPool_t *pool, pstm_int *G, pstm_int *X, pstm_int *P, 1603int32 FAST_FUNC pstm_exptmod(psPool_t *pool, pstm_int *G, pstm_int *X, pstm_int *P,
1564 pstm_int *Y) 1604 pstm_int *Y)
1565{ 1605{
1566 pstm_int M[32], res; /* Keep this winsize based: (1 << max_winsize) */ 1606 pstm_int M[32], res; /* Keep this winsize based: (1 << max_winsize) */
@@ -1801,7 +1841,7 @@ LBL_RES:pstm_clear(&res);
1801/* 1841/*
1802 1842
1803*/ 1843*/
1804int32 pstm_add(pstm_int *a, pstm_int *b, pstm_int *c) 1844int32 FAST_FUNC pstm_add(pstm_int *a, pstm_int *b, pstm_int *c)
1805{ 1845{
1806 int32 res; 1846 int32 res;
1807 int sa, sb; //bbox: was int16 1847 int sa, sb; //bbox: was int16
@@ -1862,6 +1902,7 @@ static void pstm_reverse (unsigned char *s, int len) //bbox: was int16 len
1862 No reverse. Useful in some of the EIP-154 PKA stuff where special byte 1902 No reverse. Useful in some of the EIP-154 PKA stuff where special byte
1863 order seems to come into play more often 1903 order seems to come into play more often
1864*/ 1904*/
1905#if 0 //UNUSED
1865int32 pstm_to_unsigned_bin_nr(psPool_t *pool, pstm_int *a, unsigned char *b) 1906int32 pstm_to_unsigned_bin_nr(psPool_t *pool, pstm_int *a, unsigned char *b)
1866{ 1907{
1867 int32 res; 1908 int32 res;
@@ -1883,11 +1924,12 @@ int32 pstm_to_unsigned_bin_nr(psPool_t *pool, pstm_int *a, unsigned char *b)
1883 pstm_clear(&t); 1924 pstm_clear(&t);
1884 return PS_SUCCESS; 1925 return PS_SUCCESS;
1885} 1926}
1927#endif
1886/******************************************************************************/ 1928/******************************************************************************/
1887/* 1929/*
1888 1930
1889*/ 1931*/
1890int32 pstm_to_unsigned_bin(psPool_t *pool, pstm_int *a, unsigned char *b) 1932int32 FAST_FUNC pstm_to_unsigned_bin(psPool_t *pool, pstm_int *a, unsigned char *b)
1891{ 1933{
1892 int32 res; 1934 int32 res;
1893 int x; //bbox: was int16 1935 int x; //bbox: was int16
@@ -1910,11 +1952,12 @@ int32 pstm_to_unsigned_bin(psPool_t *pool, pstm_int *a, unsigned char *b)
1910 return PS_SUCCESS; 1952 return PS_SUCCESS;
1911} 1953}
1912 1954
1955#if 0 //UNUSED
1913/******************************************************************************/ 1956/******************************************************************************/
1914/* 1957/*
1915 compare against a single digit 1958 compare against a single digit
1916*/ 1959*/
1917int32 pstm_cmp_d(pstm_int *a, pstm_digit b) 1960static int32 pstm_cmp_d(pstm_int *a, pstm_digit b)
1918{ 1961{
1919 /* compare based on sign */ 1962 /* compare based on sign */
1920 if ((b && a->used == 0) || a->sign == PSTM_NEG) { 1963 if ((b && a->used == 0) || a->sign == PSTM_NEG) {
@@ -2259,5 +2302,7 @@ LBL_Y: pstm_clear(&y);
2259LBL_X: pstm_clear(&x); 2302LBL_X: pstm_clear(&x);
2260 return res; 2303 return res;
2261} 2304}
2305#endif //UNUSED
2306
2262#endif /* !DISABLE_PSTM */ 2307#endif /* !DISABLE_PSTM */
2263/******************************************************************************/ 2308/******************************************************************************/
diff --git a/networking/tls_pstm.h b/networking/tls_pstm.h
index df705adce..bc7a0119a 100644
--- a/networking/tls_pstm.h
+++ b/networking/tls_pstm.h
@@ -136,148 +136,148 @@ typedef struct {
136#define pstm_isodd(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 1)) ? PS_TRUE : PS_FALSE) 136#define pstm_isodd(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 1)) ? PS_TRUE : PS_FALSE)
137#define pstm_abs(a, b) { pstm_copy(a, b); (b)->sign = 0; } 137#define pstm_abs(a, b) { pstm_copy(a, b); (b)->sign = 0; }
138 138
139extern void pstm_set(pstm_int *a, pstm_digit b); 139//made static:extern void pstm_set(pstm_int *a, pstm_digit b);
140 140
141extern void pstm_zero(pstm_int * a); 141//made static:extern void pstm_zero(pstm_int * a);
142 142
143//bbox: pool unused 143//bbox: pool unused
144#define pstm_init(pool, a) \ 144#define pstm_init(pool, a) \
145 pstm_init( a) 145 pstm_init( a)
146extern int32 pstm_init(psPool_t *pool, pstm_int * a); 146//made static:extern int32 pstm_init(psPool_t *pool, pstm_int * a);
147 147
148//bbox: pool unused 148//bbox: pool unused
149#define pstm_init_size(pool, a, size) \ 149#define pstm_init_size(pool, a, size) \
150 pstm_init_size( a, size) 150 pstm_init_size( a, size)
151extern int32 pstm_init_size(psPool_t *pool, pstm_int * a, uint32 size); 151extern int32 pstm_init_size(psPool_t *pool, pstm_int * a, uint32 size) FAST_FUNC;
152 152
153//bbox: pool unused 153//bbox: pool unused
154#define pstm_init_copy(pool, a, b, toSqr) \ 154#define pstm_init_copy(pool, a, b, toSqr) \
155 pstm_init_copy( a, b, toSqr) 155 pstm_init_copy( a, b, toSqr)
156extern int32 pstm_init_copy(psPool_t *pool, pstm_int * a, pstm_int * b, 156//made static:extern int32 pstm_init_copy(psPool_t *pool, pstm_int * a, pstm_int * b,
157 int toSqr); //bbox: was int16 toSqr 157//made static: int toSqr); //bbox: was int16 toSqr
158 158
159extern int pstm_count_bits (pstm_int * a); //bbox: was returning int16 159//made static:extern int pstm_count_bits (pstm_int * a) FAST_FUNC; //bbox: was returning int16
160 160
161//bbox: pool unused 161//bbox: pool unused
162#define pstm_init_for_read_unsigned_bin(pool, a, len) \ 162#define pstm_init_for_read_unsigned_bin(pool, a, len) \
163 pstm_init_for_read_unsigned_bin( a, len) 163 pstm_init_for_read_unsigned_bin( a, len)
164extern int32 pstm_init_for_read_unsigned_bin(psPool_t *pool, pstm_int *a, 164extern int32 pstm_init_for_read_unsigned_bin(psPool_t *pool, pstm_int *a,
165 uint32 len); 165 uint32 len) FAST_FUNC;
166 166
167extern int32 pstm_read_unsigned_bin(pstm_int *a, unsigned char *b, int32 c); 167extern int32 pstm_read_unsigned_bin(pstm_int *a, unsigned char *b, int32 c) FAST_FUNC;
168 168
169extern int32 pstm_unsigned_bin_size(pstm_int *a); 169extern int32 pstm_unsigned_bin_size(pstm_int *a) FAST_FUNC;
170 170
171extern int32 pstm_copy(pstm_int * a, pstm_int * b); 171extern int32 pstm_copy(pstm_int * a, pstm_int * b);
172 172
173extern void pstm_exch(pstm_int * a, pstm_int * b); 173//made static:extern void pstm_exch(pstm_int * a, pstm_int * b);
174 174
175extern void pstm_clear(pstm_int * a); 175extern void pstm_clear(pstm_int * a) FAST_FUNC;
176 176
177extern void pstm_clear_multi(pstm_int *mp0, pstm_int *mp1, pstm_int *mp2, 177extern void pstm_clear_multi(pstm_int *mp0, pstm_int *mp1, pstm_int *mp2,
178 pstm_int *mp3, pstm_int *mp4, pstm_int *mp5, pstm_int *mp6, 178 pstm_int *mp3, pstm_int *mp4, pstm_int *mp5, pstm_int *mp6,
179 pstm_int *mp7); 179 pstm_int *mp7) FAST_FUNC;
180 180
181extern int32 pstm_grow(pstm_int * a, int size); //bbox: was int16 size 181extern int32 pstm_grow(pstm_int * a, int size) FAST_FUNC; //bbox: was int16 size
182 182
183extern void pstm_clamp(pstm_int * a); 183extern void pstm_clamp(pstm_int * a) FAST_FUNC;
184 184
185extern int32 pstm_cmp(pstm_int * a, pstm_int * b); 185extern int32 pstm_cmp(pstm_int * a, pstm_int * b) FAST_FUNC;
186 186
187extern int32 pstm_cmp_mag(pstm_int * a, pstm_int * b); 187extern int32 pstm_cmp_mag(pstm_int * a, pstm_int * b) FAST_FUNC;
188 188
189extern void pstm_rshd(pstm_int *a, int x); //bbox: was int16 x 189//made static:extern void pstm_rshd(pstm_int *a, int x); //bbox: was int16 x
190 190
191extern int32 pstm_lshd(pstm_int * a, int b); //bbox: was int16 b 191//made static:extern int32 pstm_lshd(pstm_int * a, int b); //bbox: was int16 b
192 192
193//bbox: pool unused 193//bbox: pool unused
194#define pstm_div(pool, a, b, c, d) \ 194#define pstm_div(pool, a, b, c, d) \
195 pstm_div( a, b, c, d) 195 pstm_div( a, b, c, d)
196extern int32 pstm_div(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c, 196//made static:extern int32 pstm_div(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c,
197 pstm_int *d); 197//made static: pstm_int *d);
198 198
199//bbox: pool unused 199//bbox: pool unused
200#define pstm_div_2d(pool, a, b, c, d) \ 200#define pstm_div_2d(pool, a, b, c, d) \
201 pstm_div_2d( a, b, c, d) 201 pstm_div_2d( a, b, c, d)
202extern int32 pstm_div_2d(psPool_t *pool, pstm_int *a, int b, pstm_int *c, 202//made static:extern int32 pstm_div_2d(psPool_t *pool, pstm_int *a, int b, pstm_int *c,
203 pstm_int *d); //bbox: was int16 b 203//made static: pstm_int *d); //bbox: was int16 b
204 204
205extern int32 pstm_div_2(pstm_int * a, pstm_int * b); 205extern int32 pstm_div_2(pstm_int * a, pstm_int * b) FAST_FUNC;
206 206
207extern int32 s_pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c); 207extern int32 s_pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c) FAST_FUNC;
208 208
209extern int32 pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c); 209extern int32 pstm_sub(pstm_int *a, pstm_int *b, pstm_int *c) FAST_FUNC;
210 210
211//bbox: pool unused 211//bbox: pool unused
212#define pstm_sub_d(pool, a, b, c) \ 212#define pstm_sub_d(pool, a, b, c) \
213 pstm_sub_d( a, b, c) 213 pstm_sub_d( a, b, c)
214extern int32 pstm_sub_d(psPool_t *pool, pstm_int *a, pstm_digit b, pstm_int *c); 214extern int32 pstm_sub_d(psPool_t *pool, pstm_int *a, pstm_digit b, pstm_int *c) FAST_FUNC;
215 215
216extern int32 pstm_mul_2(pstm_int * a, pstm_int * b); 216extern int32 pstm_mul_2(pstm_int * a, pstm_int * b) FAST_FUNC;
217 217
218//bbox: pool unused 218//bbox: pool unused
219#define pstm_mod(pool, a, b, c) \ 219#define pstm_mod(pool, a, b, c) \
220 pstm_mod( a, b, c) 220 pstm_mod( a, b, c)
221extern int32 pstm_mod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c); 221//made static:extern int32 pstm_mod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c);
222 222
223//bbox: pool unused 223//bbox: pool unused
224#define pstm_mulmod(pool, a, b, c, d) \ 224#define pstm_mulmod(pool, a, b, c, d) \
225 pstm_mulmod( a, b, c, d) 225 pstm_mulmod( a, b, c, d)
226extern int32 pstm_mulmod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c, 226extern int32 pstm_mulmod(psPool_t *pool, pstm_int *a, pstm_int *b, pstm_int *c,
227 pstm_int *d); 227 pstm_int *d) FAST_FUNC;
228 228
229//bbox: pool unused 229//bbox: pool unused
230#define pstm_exptmod(pool, G, X, P, Y) \ 230#define pstm_exptmod(pool, G, X, P, Y) \
231 pstm_exptmod( G, X, P, Y) 231 pstm_exptmod( G, X, P, Y)
232extern int32 pstm_exptmod(psPool_t *pool, pstm_int *G, pstm_int *X, pstm_int *P, 232extern int32 pstm_exptmod(psPool_t *pool, pstm_int *G, pstm_int *X, pstm_int *P,
233 pstm_int *Y); 233 pstm_int *Y) FAST_FUNC;
234 234
235extern int32 pstm_2expt(pstm_int *a, int b); //bbox: was int16 b 235//made static:extern int32 pstm_2expt(pstm_int *a, int b); //bbox: was int16 b
236 236
237extern int32 pstm_add(pstm_int *a, pstm_int *b, pstm_int *c); 237extern int32 pstm_add(pstm_int *a, pstm_int *b, pstm_int *c) FAST_FUNC;
238 238
239//bbox: pool unused 239//bbox: pool unused
240#define pstm_to_unsigned_bin(pool, a, b) \ 240#define pstm_to_unsigned_bin(pool, a, b) \
241 pstm_to_unsigned_bin( a, b) 241 pstm_to_unsigned_bin( a, b)
242extern int32 pstm_to_unsigned_bin(psPool_t *pool, pstm_int *a, 242extern int32 pstm_to_unsigned_bin(psPool_t *pool, pstm_int *a,
243 unsigned char *b); 243 unsigned char *b) FAST_FUNC;
244 244
245//bbox: pool unused 245//bbox: pool unused
246#define pstm_to_unsigned_bin_nr(pool, a, b) \ 246#define pstm_to_unsigned_bin_nr(pool, a, b) \
247 pstm_to_unsigned_bin_nr( a, b) 247 pstm_to_unsigned_bin_nr( a, b)
248extern int32 pstm_to_unsigned_bin_nr(psPool_t *pool, pstm_int *a, 248extern int32 pstm_to_unsigned_bin_nr(psPool_t *pool, pstm_int *a,
249 unsigned char *b); 249 unsigned char *b) FAST_FUNC;
250 250
251extern int32 pstm_montgomery_setup(pstm_int *a, pstm_digit *rho); 251//made static:extern int32 pstm_montgomery_setup(pstm_int *a, pstm_digit *rho);
252 252
253//bbox: pool unused 253//bbox: pool unused
254#define pstm_montgomery_reduce(pool, a, m, mp, paD, paDlen) \ 254#define pstm_montgomery_reduce(pool, a, m, mp, paD, paDlen) \
255 pstm_montgomery_reduce( a, m, mp, paD, paDlen) 255 pstm_montgomery_reduce( a, m, mp, paD, paDlen)
256extern int32 pstm_montgomery_reduce(psPool_t *pool, pstm_int *a, pstm_int *m, 256extern int32 pstm_montgomery_reduce(psPool_t *pool, pstm_int *a, pstm_int *m,
257 pstm_digit mp, pstm_digit *paD, uint32 paDlen); 257 pstm_digit mp, pstm_digit *paD, uint32 paDlen) FAST_FUNC;
258 258
259#define pstm_mul_comba(pool, A, B, C, paD, paDlen) \ 259#define pstm_mul_comba(pool, A, B, C, paD, paDlen) \
260 pstm_mul_comba( A, B, C, paD, paDlen) 260 pstm_mul_comba( A, B, C, paD, paDlen)
261extern int32 pstm_mul_comba(psPool_t *pool, pstm_int *A, pstm_int *B, 261extern int32 pstm_mul_comba(psPool_t *pool, pstm_int *A, pstm_int *B,
262 pstm_int *C, pstm_digit *paD, uint32 paDlen); 262 pstm_int *C, pstm_digit *paD, uint32 paDlen) FAST_FUNC;
263 263
264//bbox: pool unused 264//bbox: pool unused
265#define pstm_sqr_comba(pool, A, B, paD, paDlen) \ 265#define pstm_sqr_comba(pool, A, B, paD, paDlen) \
266 pstm_sqr_comba( A, B, paD, paDlen) 266 pstm_sqr_comba( A, B, paD, paDlen)
267extern int32 pstm_sqr_comba(psPool_t *pool, pstm_int *A, pstm_int *B, 267extern int32 pstm_sqr_comba(psPool_t *pool, pstm_int *A, pstm_int *B,
268 pstm_digit *paD, uint32 paDlen); 268 pstm_digit *paD, uint32 paDlen) FAST_FUNC;
269 269
270extern int32 pstm_cmp_d(pstm_int *a, pstm_digit b); 270//made static:extern int32 pstm_cmp_d(pstm_int *a, pstm_digit b);
271 271
272extern int32 pstm_montgomery_calc_normalization(pstm_int *a, pstm_int *b); 272//made static:extern int32 pstm_montgomery_calc_normalization(pstm_int *a, pstm_int *b);
273 273
274extern int32 pstm_mul_d(pstm_int *a, pstm_digit b, pstm_int *c); 274//made static:extern int32 pstm_mul_d(pstm_int *a, pstm_digit b, pstm_int *c);
275 275
276//bbox: pool unused 276//bbox: pool unused
277#define pstm_invmod(pool, a, b, c) \ 277#define pstm_invmod(pool, a, b, c) \
278 pstm_invmod( a, b, c) 278 pstm_invmod( a, b, c)
279extern int32 pstm_invmod(psPool_t *pool, pstm_int * a, pstm_int * b, 279extern int32 pstm_invmod(psPool_t *pool, pstm_int * a, pstm_int * b,
280 pstm_int * c); 280 pstm_int * c) FAST_FUNC;
281 281
282#else /* DISABLE_PSTM */ 282#else /* DISABLE_PSTM */
283 typedef int32 pstm_int; 283 typedef int32 pstm_int;
diff --git a/networking/tls_pstm_montgomery_reduce.c b/networking/tls_pstm_montgomery_reduce.c
index 3391755e1..d46e2aa2b 100644
--- a/networking/tls_pstm_montgomery_reduce.c
+++ b/networking/tls_pstm_montgomery_reduce.c
@@ -340,7 +340,7 @@ asm( \
340#define LO 0 340#define LO 0
341 341
342/* computes x/R == x (mod N) via Montgomery Reduction */ 342/* computes x/R == x (mod N) via Montgomery Reduction */
343int32 pstm_montgomery_reduce(psPool_t *pool, pstm_int *a, pstm_int *m, 343int32 FAST_FUNC pstm_montgomery_reduce(psPool_t *pool, pstm_int *a, pstm_int *m,
344 pstm_digit mp, pstm_digit *paD, uint32 paDlen) 344 pstm_digit mp, pstm_digit *paD, uint32 paDlen)
345{ 345{
346 pstm_digit *c, *_c, *tmpm, mu; 346 pstm_digit *c, *_c, *tmpm, mu;
diff --git a/networking/tls_pstm_mul_comba.c b/networking/tls_pstm_mul_comba.c
index 6ba152bc1..ac4fcc3ef 100644
--- a/networking/tls_pstm_mul_comba.c
+++ b/networking/tls_pstm_mul_comba.c
@@ -754,7 +754,7 @@ static int32 pstm_mul_comba32(pstm_int *A, pstm_int *B, pstm_int *C)
754 754
755/******************************************************************************/ 755/******************************************************************************/
756 756
757int32 pstm_mul_comba(psPool_t *pool, pstm_int *A, pstm_int *B, pstm_int *C, 757int32 FAST_FUNC pstm_mul_comba(psPool_t *pool, pstm_int *A, pstm_int *B, pstm_int *C,
758 pstm_digit *paD, uint32 paDlen) 758 pstm_digit *paD, uint32 paDlen)
759{ 759{
760#ifdef USE_1024_KEY_SPEED_OPTIMIZATIONS 760#ifdef USE_1024_KEY_SPEED_OPTIMIZATIONS
diff --git a/networking/tls_pstm_sqr_comba.c b/networking/tls_pstm_sqr_comba.c
index d5c74d2f0..8604132d6 100644
--- a/networking/tls_pstm_sqr_comba.c
+++ b/networking/tls_pstm_sqr_comba.c
@@ -1085,7 +1085,7 @@ static int32 pstm_sqr_comba32(pstm_int *A, pstm_int *B)
1085/******************************************************************************/ 1085/******************************************************************************/
1086/* 1086/*
1087 */ 1087 */
1088int32 pstm_sqr_comba(psPool_t *pool, pstm_int *A, pstm_int *B, pstm_digit *paD, 1088int32 FAST_FUNC pstm_sqr_comba(psPool_t *pool, pstm_int *A, pstm_int *B, pstm_digit *paD,
1089 uint32 paDlen) 1089 uint32 paDlen)
1090{ 1090{
1091#ifdef USE_1024_KEY_SPEED_OPTIMIZATIONS 1091#ifdef USE_1024_KEY_SPEED_OPTIMIZATIONS
diff --git a/networking/tls_rsa.c b/networking/tls_rsa.c
index 631397e4d..5fda1cb49 100644
--- a/networking/tls_rsa.c
+++ b/networking/tls_rsa.c
@@ -173,7 +173,9 @@ error:
173 res = PS_FAILURE; 173 res = PS_FAILURE;
174done: 174done:
175 if (type == PRIVKEY_TYPE && key->optimized) { 175 if (type == PRIVKEY_TYPE && key->optimized) {
176 pstm_clear_multi(&tmpa, &tmpb, NULL, NULL, NULL, NULL, NULL, NULL); 176 //pstm_clear_multi(&tmpa, &tmpb, NULL, NULL, NULL, NULL, NULL, NULL);
177 pstm_clear(&tmpa);
178 pstm_clear(&tmpb);
177 } 179 }
178 pstm_clear(&tmp); 180 pstm_clear(&tmp);
179 return res; 181 return res;