summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto
diff options
context:
space:
mode:
authorbeck <>2001-08-01 19:51:17 +0000
committerbeck <>2001-08-01 19:51:17 +0000
commit4b790f68539c49ef91f5e82506c2624900c92106 (patch)
treed14ff9f79630cb04ad006cd2730646f44f62d786 /src/lib/libcrypto
parentedbfd6c7e91e15e92ef0df548474ac76b6dddca0 (diff)
downloadopenbsd-4b790f68539c49ef91f5e82506c2624900c92106.tar.gz
openbsd-4b790f68539c49ef91f5e82506c2624900c92106.tar.bz2
openbsd-4b790f68539c49ef91f5e82506c2624900c92106.zip
merge openssl 0.9.6b-engine
Note that this is a maintenence release, API's appear *not* to have changed. As such, I have only increased the minor number on these libraries
Diffstat (limited to 'src/lib/libcrypto')
-rw-r--r--src/lib/libcrypto/asn1/t_x509.c2
-rw-r--r--src/lib/libcrypto/asn1/x_pubkey.c2
-rw-r--r--src/lib/libcrypto/bio/b_print.c14
-rw-r--r--src/lib/libcrypto/bio/bf_buff.c2
-rw-r--r--src/lib/libcrypto/bn/asm/mips3.s430
-rw-r--r--src/lib/libcrypto/cryptlib.c10
-rw-r--r--src/lib/libcrypto/dsa/dsa.h1
-rw-r--r--src/lib/libcrypto/dsa/dsa_err.c1
-rw-r--r--src/lib/libcrypto/dsa/dsa_ossl.c21
-rw-r--r--src/lib/libcrypto/evp/e_bf.c2
-rw-r--r--src/lib/libcrypto/evp/evp.h6
-rw-r--r--src/lib/libcrypto/evp/evp_key.c6
-rw-r--r--src/lib/libcrypto/opensslv.h6
-rw-r--r--src/lib/libcrypto/perlasm/x86unix.pl2
-rw-r--r--src/lib/libcrypto/rand/md_rand.c99
-rw-r--r--src/lib/libcrypto/rand/randfile.c8
-rw-r--r--src/lib/libcrypto/rsa/rsa_oaep.c29
-rw-r--r--src/lib/libcrypto/x509/x509_obj.c2
-rw-r--r--src/lib/libcrypto/x509/x509_trs.c3
19 files changed, 390 insertions, 256 deletions
diff --git a/src/lib/libcrypto/asn1/t_x509.c b/src/lib/libcrypto/asn1/t_x509.c
index 314bdfb1c7..89ae73a6de 100644
--- a/src/lib/libcrypto/asn1/t_x509.c
+++ b/src/lib/libcrypto/asn1/t_x509.c
@@ -349,6 +349,8 @@ int X509_NAME_print(BIO *bp, X509_NAME *name, int obase)
349 ll=80-2-obase; 349 ll=80-2-obase;
350 350
351 s=X509_NAME_oneline(name,buf,256); 351 s=X509_NAME_oneline(name,buf,256);
352 if (!*s)
353 return 1;
352 s++; /* skip the first slash */ 354 s++; /* skip the first slash */
353 355
354 l=ll; 356 l=ll;
diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c
index b2e2a51477..4397a404b5 100644
--- a/src/lib/libcrypto/asn1/x_pubkey.c
+++ b/src/lib/libcrypto/asn1/x_pubkey.c
@@ -234,7 +234,7 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
234 a=key->algor; 234 a=key->algor;
235 if (ret->type == EVP_PKEY_DSA) 235 if (ret->type == EVP_PKEY_DSA)
236 { 236 {
237 if (a->parameter->type == V_ASN1_SEQUENCE) 237 if (a->parameter && (a->parameter->type == V_ASN1_SEQUENCE))
238 { 238 {
239 ret->pkey.dsa->write_params=0; 239 ret->pkey.dsa->write_params=0;
240 p=a->parameter->value.sequence->data; 240 p=a->parameter->value.sequence->data;
diff --git a/src/lib/libcrypto/bio/b_print.c b/src/lib/libcrypto/bio/b_print.c
index b4f7a85f2e..91a049406e 100644
--- a/src/lib/libcrypto/bio/b_print.c
+++ b/src/lib/libcrypto/bio/b_print.c
@@ -109,7 +109,11 @@
109#endif 109#endif
110 110
111#if HAVE_LONG_LONG 111#if HAVE_LONG_LONG
112#define LLONG long long 112# if defined(WIN32) && !defined(__GNUC__)
113# define LLONG _int64
114# else
115# define LLONG long long
116# endif
113#else 117#else
114#define LLONG long 118#define LLONG long
115#endif 119#endif
@@ -152,7 +156,7 @@ static void _dopr(char **sbuffer, char **buffer,
152 156
153/* some handy macros */ 157/* some handy macros */
154#define char_to_int(p) (p - '0') 158#define char_to_int(p) (p - '0')
155#define MAX(p,q) ((p >= q) ? p : q) 159#define OSSL_MAX(p,q) ((p >= q) ? p : q)
156 160
157static void 161static void
158_dopr( 162_dopr(
@@ -503,13 +507,13 @@ fmtint(
503 convert[place] = 0; 507 convert[place] = 0;
504 508
505 zpadlen = max - place; 509 zpadlen = max - place;
506 spadlen = min - MAX(max, place) - (signvalue ? 1 : 0); 510 spadlen = min - OSSL_MAX(max, place) - (signvalue ? 1 : 0);
507 if (zpadlen < 0) 511 if (zpadlen < 0)
508 zpadlen = 0; 512 zpadlen = 0;
509 if (spadlen < 0) 513 if (spadlen < 0)
510 spadlen = 0; 514 spadlen = 0;
511 if (flags & DP_F_ZERO) { 515 if (flags & DP_F_ZERO) {
512 zpadlen = MAX(zpadlen, spadlen); 516 zpadlen = OSSL_MAX(zpadlen, spadlen);
513 spadlen = 0; 517 spadlen = 0;
514 } 518 }
515 if (flags & DP_F_MINUS) 519 if (flags & DP_F_MINUS)
@@ -641,7 +645,7 @@ fmtfp(
641 (caps ? "0123456789ABCDEF" 645 (caps ? "0123456789ABCDEF"
642 : "0123456789abcdef")[fracpart % 10]; 646 : "0123456789abcdef")[fracpart % 10];
643 fracpart = (fracpart / 10); 647 fracpart = (fracpart / 10);
644 } while (fracpart && (fplace < 20)); 648 } while (fplace < max);
645 if (fplace == 20) 649 if (fplace == 20)
646 fplace--; 650 fplace--;
647 fconvert[fplace] = 0; 651 fconvert[fplace] = 0;
diff --git a/src/lib/libcrypto/bio/bf_buff.c b/src/lib/libcrypto/bio/bf_buff.c
index f50e8f98a3..c90238bae1 100644
--- a/src/lib/libcrypto/bio/bf_buff.c
+++ b/src/lib/libcrypto/bio/bf_buff.c
@@ -70,7 +70,7 @@ static long buffer_ctrl(BIO *h, int cmd, long arg1, void *arg2);
70static int buffer_new(BIO *h); 70static int buffer_new(BIO *h);
71static int buffer_free(BIO *data); 71static int buffer_free(BIO *data);
72static long buffer_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); 72static long buffer_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp);
73#define DEFAULT_BUFFER_SIZE 1024 73#define DEFAULT_BUFFER_SIZE 4096
74 74
75static BIO_METHOD methods_buffer= 75static BIO_METHOD methods_buffer=
76 { 76 {
diff --git a/src/lib/libcrypto/bn/asm/mips3.s b/src/lib/libcrypto/bn/asm/mips3.s
index 45786c00a5..dca4105c7d 100644
--- a/src/lib/libcrypto/bn/asm/mips3.s
+++ b/src/lib/libcrypto/bn/asm/mips3.s
@@ -1,5 +1,5 @@
1.rdata 1.rdata
2.asciiz "mips3.s, Version 1.0" 2.asciiz "mips3.s, Version 1.1"
3.asciiz "MIPS III/IV ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" 3.asciiz "MIPS III/IV ISA artwork by Andy Polyakov <appro@fy.chalmers.se>"
4 4
5/* 5/*
@@ -849,6 +849,7 @@ LEAF(bn_mul_comba8)
849 sltu AT,c_1,t_1 849 sltu AT,c_1,t_1
850 daddu t_2,AT 850 daddu t_2,AT
851 daddu c_2,t_2 851 daddu c_2,t_2
852 sltu c_3,c_2,t_2
852 dmultu a_1,b_2 /* mul_add_c(a[1],b[2],c1,c2,c3); */ 853 dmultu a_1,b_2 /* mul_add_c(a[1],b[2],c1,c2,c3); */
853 mflo t_1 854 mflo t_1
854 mfhi t_2 855 mfhi t_2
@@ -856,7 +857,8 @@ LEAF(bn_mul_comba8)
856 sltu AT,c_1,t_1 857 sltu AT,c_1,t_1
857 daddu t_2,AT 858 daddu t_2,AT
858 daddu c_2,t_2 859 daddu c_2,t_2
859 sltu c_3,c_2,t_2 860 sltu AT,c_2,t_2
861 daddu c_3,AT
860 dmultu a_2,b_1 /* mul_add_c(a[2],b[1],c1,c2,c3); */ 862 dmultu a_2,b_1 /* mul_add_c(a[2],b[1],c1,c2,c3); */
861 mflo t_1 863 mflo t_1
862 mfhi t_2 864 mfhi t_2
@@ -884,6 +886,7 @@ LEAF(bn_mul_comba8)
884 sltu AT,c_2,t_1 886 sltu AT,c_2,t_1
885 daddu t_2,AT 887 daddu t_2,AT
886 daddu c_3,t_2 888 daddu c_3,t_2
889 sltu c_1,c_3,t_2
887 dmultu a_3,b_1 /* mul_add_c(a[3],b[1],c2,c3,c1); */ 890 dmultu a_3,b_1 /* mul_add_c(a[3],b[1],c2,c3,c1); */
888 mflo t_1 891 mflo t_1
889 mfhi t_2 892 mfhi t_2
@@ -891,7 +894,8 @@ LEAF(bn_mul_comba8)
891 sltu AT,c_2,t_1 894 sltu AT,c_2,t_1
892 daddu t_2,AT 895 daddu t_2,AT
893 daddu c_3,t_2 896 daddu c_3,t_2
894 sltu c_1,c_3,t_2 897 sltu AT,c_3,t_2
898 daddu c_1,AT
895 dmultu a_2,b_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */ 899 dmultu a_2,b_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
896 mflo t_1 900 mflo t_1
897 mfhi t_2 901 mfhi t_2
@@ -928,6 +932,7 @@ LEAF(bn_mul_comba8)
928 sltu AT,c_3,t_1 932 sltu AT,c_3,t_1
929 daddu t_2,AT 933 daddu t_2,AT
930 daddu c_1,t_2 934 daddu c_1,t_2
935 sltu c_2,c_1,t_2
931 dmultu a_1,b_4 /* mul_add_c(a[1],b[4],c3,c1,c2); */ 936 dmultu a_1,b_4 /* mul_add_c(a[1],b[4],c3,c1,c2); */
932 mflo t_1 937 mflo t_1
933 mfhi t_2 938 mfhi t_2
@@ -935,7 +940,8 @@ LEAF(bn_mul_comba8)
935 sltu AT,c_3,t_1 940 sltu AT,c_3,t_1
936 daddu t_2,AT 941 daddu t_2,AT
937 daddu c_1,t_2 942 daddu c_1,t_2
938 sltu c_2,c_1,t_2 943 sltu AT,c_1,t_2
944 daddu c_2,AT
939 dmultu a_2,b_3 /* mul_add_c(a[2],b[3],c3,c1,c2); */ 945 dmultu a_2,b_3 /* mul_add_c(a[2],b[3],c3,c1,c2); */
940 mflo t_1 946 mflo t_1
941 mfhi t_2 947 mfhi t_2
@@ -981,6 +987,7 @@ LEAF(bn_mul_comba8)
981 sltu AT,c_1,t_1 987 sltu AT,c_1,t_1
982 daddu t_2,AT 988 daddu t_2,AT
983 daddu c_2,t_2 989 daddu c_2,t_2
990 sltu c_3,c_2,t_2
984 dmultu a_5,b_1 /* mul_add_c(a[5],b[1],c1,c2,c3); */ 991 dmultu a_5,b_1 /* mul_add_c(a[5],b[1],c1,c2,c3); */
985 mflo t_1 992 mflo t_1
986 mfhi t_2 993 mfhi t_2
@@ -988,7 +995,8 @@ LEAF(bn_mul_comba8)
988 sltu AT,c_1,t_1 995 sltu AT,c_1,t_1
989 daddu t_2,AT 996 daddu t_2,AT
990 daddu c_2,t_2 997 daddu c_2,t_2
991 sltu c_3,c_2,t_2 998 sltu AT,c_2,t_2
999 daddu c_3,AT
992 dmultu a_4,b_2 /* mul_add_c(a[4],b[2],c1,c2,c3); */ 1000 dmultu a_4,b_2 /* mul_add_c(a[4],b[2],c1,c2,c3); */
993 mflo t_1 1001 mflo t_1
994 mfhi t_2 1002 mfhi t_2
@@ -1043,6 +1051,7 @@ LEAF(bn_mul_comba8)
1043 sltu AT,c_2,t_1 1051 sltu AT,c_2,t_1
1044 daddu t_2,AT 1052 daddu t_2,AT
1045 daddu c_3,t_2 1053 daddu c_3,t_2
1054 sltu c_1,c_3,t_2
1046 dmultu a_1,b_6 /* mul_add_c(a[1],b[6],c2,c3,c1); */ 1055 dmultu a_1,b_6 /* mul_add_c(a[1],b[6],c2,c3,c1); */
1047 mflo t_1 1056 mflo t_1
1048 mfhi t_2 1057 mfhi t_2
@@ -1050,7 +1059,8 @@ LEAF(bn_mul_comba8)
1050 sltu AT,c_2,t_1 1059 sltu AT,c_2,t_1
1051 daddu t_2,AT 1060 daddu t_2,AT
1052 daddu c_3,t_2 1061 daddu c_3,t_2
1053 sltu c_1,c_3,t_2 1062 sltu AT,c_3,t_2
1063 daddu c_1,AT
1054 dmultu a_2,b_5 /* mul_add_c(a[2],b[5],c2,c3,c1); */ 1064 dmultu a_2,b_5 /* mul_add_c(a[2],b[5],c2,c3,c1); */
1055 mflo t_1 1065 mflo t_1
1056 mfhi t_2 1066 mfhi t_2
@@ -1114,6 +1124,7 @@ LEAF(bn_mul_comba8)
1114 sltu AT,c_3,t_1 1124 sltu AT,c_3,t_1
1115 daddu t_2,AT 1125 daddu t_2,AT
1116 daddu c_1,t_2 1126 daddu c_1,t_2
1127 sltu c_2,c_1,t_2
1117 dmultu a_6,b_2 /* mul_add_c(a[6],b[2],c3,c1,c2); */ 1128 dmultu a_6,b_2 /* mul_add_c(a[6],b[2],c3,c1,c2); */
1118 mflo t_1 1129 mflo t_1
1119 mfhi t_2 1130 mfhi t_2
@@ -1121,7 +1132,8 @@ LEAF(bn_mul_comba8)
1121 sltu AT,c_3,t_1 1132 sltu AT,c_3,t_1
1122 daddu t_2,AT 1133 daddu t_2,AT
1123 daddu c_1,t_2 1134 daddu c_1,t_2
1124 sltu c_2,c_1,t_2 1135 sltu AT,c_1,t_2
1136 daddu c_2,AT
1125 dmultu a_5,b_3 /* mul_add_c(a[5],b[3],c3,c1,c2); */ 1137 dmultu a_5,b_3 /* mul_add_c(a[5],b[3],c3,c1,c2); */
1126 mflo t_1 1138 mflo t_1
1127 mfhi t_2 1139 mfhi t_2
@@ -1176,6 +1188,7 @@ LEAF(bn_mul_comba8)
1176 sltu AT,c_1,t_1 1188 sltu AT,c_1,t_1
1177 daddu t_2,AT 1189 daddu t_2,AT
1178 daddu c_2,t_2 1190 daddu c_2,t_2
1191 sltu c_3,c_2,t_2
1179 dmultu a_3,b_6 /* mul_add_c(a[3],b[6],c1,c2,c3); */ 1192 dmultu a_3,b_6 /* mul_add_c(a[3],b[6],c1,c2,c3); */
1180 mflo t_1 1193 mflo t_1
1181 mfhi t_2 1194 mfhi t_2
@@ -1183,7 +1196,8 @@ LEAF(bn_mul_comba8)
1183 sltu AT,c_1,t_1 1196 sltu AT,c_1,t_1
1184 daddu t_2,AT 1197 daddu t_2,AT
1185 daddu c_2,t_2 1198 daddu c_2,t_2
1186 sltu c_3,c_2,t_2 1199 sltu AT,c_2,t_2
1200 daddu c_3,AT
1187 dmultu a_4,b_5 /* mul_add_c(a[4],b[5],c1,c2,c3); */ 1201 dmultu a_4,b_5 /* mul_add_c(a[4],b[5],c1,c2,c3); */
1188 mflo t_1 1202 mflo t_1
1189 mfhi t_2 1203 mfhi t_2
@@ -1229,6 +1243,7 @@ LEAF(bn_mul_comba8)
1229 sltu AT,c_2,t_1 1243 sltu AT,c_2,t_1
1230 daddu t_2,AT 1244 daddu t_2,AT
1231 daddu c_3,t_2 1245 daddu c_3,t_2
1246 sltu c_1,c_3,t_2
1232 dmultu a_6,b_4 /* mul_add_c(a[6],b[4],c2,c3,c1); */ 1247 dmultu a_6,b_4 /* mul_add_c(a[6],b[4],c2,c3,c1); */
1233 mflo t_1 1248 mflo t_1
1234 mfhi t_2 1249 mfhi t_2
@@ -1236,7 +1251,8 @@ LEAF(bn_mul_comba8)
1236 sltu AT,c_2,t_1 1251 sltu AT,c_2,t_1
1237 daddu t_2,AT 1252 daddu t_2,AT
1238 daddu c_3,t_2 1253 daddu c_3,t_2
1239 sltu c_1,c_3,t_2 1254 sltu AT,c_3,t_2
1255 daddu c_1,AT
1240 dmultu a_5,b_5 /* mul_add_c(a[5],b[5],c2,c3,c1); */ 1256 dmultu a_5,b_5 /* mul_add_c(a[5],b[5],c2,c3,c1); */
1241 mflo t_1 1257 mflo t_1
1242 mfhi t_2 1258 mfhi t_2
@@ -1273,6 +1289,7 @@ LEAF(bn_mul_comba8)
1273 sltu AT,c_3,t_1 1289 sltu AT,c_3,t_1
1274 daddu t_2,AT 1290 daddu t_2,AT
1275 daddu c_1,t_2 1291 daddu c_1,t_2
1292 sltu c_2,c_1,t_2
1276 dmultu a_5,b_6 /* mul_add_c(a[5],b[6],c3,c1,c2); */ 1293 dmultu a_5,b_6 /* mul_add_c(a[5],b[6],c3,c1,c2); */
1277 mflo t_1 1294 mflo t_1
1278 mfhi t_2 1295 mfhi t_2
@@ -1280,7 +1297,8 @@ LEAF(bn_mul_comba8)
1280 sltu AT,c_3,t_1 1297 sltu AT,c_3,t_1
1281 daddu t_2,AT 1298 daddu t_2,AT
1282 daddu c_1,t_2 1299 daddu c_1,t_2
1283 sltu c_2,c_1,t_2 1300 sltu AT,c_1,t_2
1301 daddu c_2,AT
1284 dmultu a_6,b_5 /* mul_add_c(a[6],b[5],c3,c1,c2); */ 1302 dmultu a_6,b_5 /* mul_add_c(a[6],b[5],c3,c1,c2); */
1285 mflo t_1 1303 mflo t_1
1286 mfhi t_2 1304 mfhi t_2
@@ -1308,6 +1326,7 @@ LEAF(bn_mul_comba8)
1308 sltu AT,c_1,t_1 1326 sltu AT,c_1,t_1
1309 daddu t_2,AT 1327 daddu t_2,AT
1310 daddu c_2,t_2 1328 daddu c_2,t_2
1329 sltu c_3,c_2,t_2
1311 dmultu a_6,b_6 /* mul_add_c(a[6],b[6],c1,c2,c3); */ 1330 dmultu a_6,b_6 /* mul_add_c(a[6],b[6],c1,c2,c3); */
1312 mflo t_1 1331 mflo t_1
1313 mfhi t_2 1332 mfhi t_2
@@ -1315,7 +1334,8 @@ LEAF(bn_mul_comba8)
1315 sltu AT,c_1,t_1 1334 sltu AT,c_1,t_1
1316 daddu t_2,AT 1335 daddu t_2,AT
1317 daddu c_2,t_2 1336 daddu c_2,t_2
1318 sltu c_3,c_2,t_2 1337 sltu AT,c_2,t_2
1338 daddu c_3,AT
1319 dmultu a_5,b_7 /* mul_add_c(a[5],b[7],c1,c2,c3); */ 1339 dmultu a_5,b_7 /* mul_add_c(a[5],b[7],c1,c2,c3); */
1320 mflo t_1 1340 mflo t_1
1321 mfhi t_2 1341 mfhi t_2
@@ -1334,6 +1354,7 @@ LEAF(bn_mul_comba8)
1334 sltu AT,c_2,t_1 1354 sltu AT,c_2,t_1
1335 daddu t_2,AT 1355 daddu t_2,AT
1336 daddu c_3,t_2 1356 daddu c_3,t_2
1357 sltu c_1,c_3,t_2
1337 dmultu a_7,b_6 /* mul_add_c(a[7],b[6],c2,c3,c1); */ 1358 dmultu a_7,b_6 /* mul_add_c(a[7],b[6],c2,c3,c1); */
1338 mflo t_1 1359 mflo t_1
1339 mfhi t_2 1360 mfhi t_2
@@ -1341,7 +1362,8 @@ LEAF(bn_mul_comba8)
1341 sltu AT,c_2,t_1 1362 sltu AT,c_2,t_1
1342 daddu t_2,AT 1363 daddu t_2,AT
1343 daddu c_3,t_2 1364 daddu c_3,t_2
1344 sltu c_1,c_3,t_2 1365 sltu AT,c_3,t_2
1366 daddu c_1,AT
1345 sd c_2,104(a0) /* r[13]=c2; */ 1367 sd c_2,104(a0) /* r[13]=c2; */
1346 1368
1347 dmultu a_7,b_7 /* mul_add_c(a[7],b[7],c3,c1,c2); */ 1369 dmultu a_7,b_7 /* mul_add_c(a[7],b[7],c3,c1,c2); */
@@ -1430,6 +1452,7 @@ LEAF(bn_mul_comba4)
1430 sltu AT,c_1,t_1 1452 sltu AT,c_1,t_1
1431 daddu t_2,AT 1453 daddu t_2,AT
1432 daddu c_2,t_2 1454 daddu c_2,t_2
1455 sltu c_3,c_2,t_2
1433 dmultu a_1,b_2 /* mul_add_c(a[1],b[2],c1,c2,c3); */ 1456 dmultu a_1,b_2 /* mul_add_c(a[1],b[2],c1,c2,c3); */
1434 mflo t_1 1457 mflo t_1
1435 mfhi t_2 1458 mfhi t_2
@@ -1437,7 +1460,8 @@ LEAF(bn_mul_comba4)
1437 sltu AT,c_1,t_1 1460 sltu AT,c_1,t_1
1438 daddu t_2,AT 1461 daddu t_2,AT
1439 daddu c_2,t_2 1462 daddu c_2,t_2
1440 sltu c_3,c_2,t_2 1463 sltu AT,c_2,t_2
1464 daddu c_3,AT
1441 dmultu a_2,b_1 /* mul_add_c(a[2],b[1],c1,c2,c3); */ 1465 dmultu a_2,b_1 /* mul_add_c(a[2],b[1],c1,c2,c3); */
1442 mflo t_1 1466 mflo t_1
1443 mfhi t_2 1467 mfhi t_2
@@ -1465,6 +1489,7 @@ LEAF(bn_mul_comba4)
1465 sltu AT,c_2,t_1 1489 sltu AT,c_2,t_1
1466 daddu t_2,AT 1490 daddu t_2,AT
1467 daddu c_3,t_2 1491 daddu c_3,t_2
1492 sltu c_1,c_3,t_2
1468 dmultu a_2,b_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */ 1493 dmultu a_2,b_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
1469 mflo t_1 1494 mflo t_1
1470 mfhi t_2 1495 mfhi t_2
@@ -1472,7 +1497,8 @@ LEAF(bn_mul_comba4)
1472 sltu AT,c_2,t_1 1497 sltu AT,c_2,t_1
1473 daddu t_2,AT 1498 daddu t_2,AT
1474 daddu c_3,t_2 1499 daddu c_3,t_2
1475 sltu c_1,c_3,t_2 1500 sltu AT,c_3,t_2
1501 daddu c_1,AT
1476 dmultu a_1,b_3 /* mul_add_c(a[1],b[3],c2,c3,c1); */ 1502 dmultu a_1,b_3 /* mul_add_c(a[1],b[3],c2,c3,c1); */
1477 mflo t_1 1503 mflo t_1
1478 mfhi t_2 1504 mfhi t_2
@@ -1491,6 +1517,7 @@ LEAF(bn_mul_comba4)
1491 sltu AT,c_3,t_1 1517 sltu AT,c_3,t_1
1492 daddu t_2,AT 1518 daddu t_2,AT
1493 daddu c_1,t_2 1519 daddu c_1,t_2
1520 sltu c_2,c_1,t_2
1494 dmultu a_3,b_2 /* mul_add_c(a[3],b[2],c3,c1,c2); */ 1521 dmultu a_3,b_2 /* mul_add_c(a[3],b[2],c3,c1,c2); */
1495 mflo t_1 1522 mflo t_1
1496 mfhi t_2 1523 mfhi t_2
@@ -1498,7 +1525,8 @@ LEAF(bn_mul_comba4)
1498 sltu AT,c_3,t_1 1525 sltu AT,c_3,t_1
1499 daddu t_2,AT 1526 daddu t_2,AT
1500 daddu c_1,t_2 1527 daddu c_1,t_2
1501 sltu c_2,c_1,t_2 1528 sltu AT,c_1,t_2
1529 daddu c_2,AT
1502 sd c_3,40(a0) 1530 sd c_3,40(a0)
1503 1531
1504 dmultu a_3,b_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */ 1532 dmultu a_3,b_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
@@ -1543,28 +1571,30 @@ LEAF(bn_sqr_comba8)
1543 dmultu a_0,a_1 /* mul_add_c2(a[0],b[1],c2,c3,c1); */ 1571 dmultu a_0,a_1 /* mul_add_c2(a[0],b[1],c2,c3,c1); */
1544 mflo t_1 1572 mflo t_1
1545 mfhi t_2 1573 mfhi t_2
1574 slt c_1,t_2,zero
1575 dsll t_2,1
1576 slt a2,t_1,zero
1577 daddu t_2,a2
1578 dsll t_1,1
1546 daddu c_2,t_1 1579 daddu c_2,t_1
1547 sltu AT,c_2,t_1 1580 sltu AT,c_2,t_1
1548 daddu c_3,t_2,AT 1581 daddu c_3,t_2,AT
1549 daddu c_2,t_1
1550 sltu AT,c_2,t_1
1551 daddu t_2,AT
1552 daddu c_3,t_2
1553 sltu c_1,c_3,t_2
1554 sd c_2,8(a0) 1582 sd c_2,8(a0)
1555 1583
1556 dmultu a_2,a_0 /* mul_add_c2(a[2],b[0],c3,c1,c2); */ 1584 dmultu a_2,a_0 /* mul_add_c2(a[2],b[0],c3,c1,c2); */
1557 mflo t_1 1585 mflo t_1
1558 mfhi t_2 1586 mfhi t_2
1559 daddu c_3,t_1 1587 slt c_2,t_2,zero
1560 sltu AT,c_3,t_1 1588 dsll t_2,1
1561 daddu a2,t_2,AT 1589 slt a2,t_1,zero
1562 daddu c_1,a2 1590 daddu t_2,a2
1591 dsll t_1,1
1563 daddu c_3,t_1 1592 daddu c_3,t_1
1564 sltu AT,c_3,t_1 1593 sltu AT,c_3,t_1
1565 daddu t_2,AT 1594 daddu t_2,AT
1566 daddu c_1,t_2 1595 daddu c_1,t_2
1567 sltu c_2,c_1,t_2 1596 sltu AT,c_1,t_2
1597 daddu c_2,AT
1568 dmultu a_1,a_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */ 1598 dmultu a_1,a_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
1569 mflo t_1 1599 mflo t_1
1570 mfhi t_2 1600 mfhi t_2
@@ -1579,24 +1609,26 @@ LEAF(bn_sqr_comba8)
1579 dmultu a_0,a_3 /* mul_add_c2(a[0],b[3],c1,c2,c3); */ 1609 dmultu a_0,a_3 /* mul_add_c2(a[0],b[3],c1,c2,c3); */
1580 mflo t_1 1610 mflo t_1
1581 mfhi t_2 1611 mfhi t_2
1582 daddu c_1,t_1 1612 slt c_3,t_2,zero
1583 sltu AT,c_1,t_1 1613 dsll t_2,1
1584 daddu a2,t_2,AT 1614 slt a2,t_1,zero
1585 daddu c_2,a2 1615 daddu t_2,a2
1616 dsll t_1,1
1586 daddu c_1,t_1 1617 daddu c_1,t_1
1587 sltu AT,c_1,t_1 1618 sltu AT,c_1,t_1
1588 daddu t_2,AT 1619 daddu t_2,AT
1589 daddu c_2,t_2 1620 daddu c_2,t_2
1590 sltu c_3,c_2,t_2 1621 sltu AT,c_2,t_2
1622 daddu c_3,AT
1591 dmultu a_1,a_2 /* mul_add_c2(a[1],b[2],c1,c2,c3); */ 1623 dmultu a_1,a_2 /* mul_add_c2(a[1],b[2],c1,c2,c3); */
1592 mflo t_1 1624 mflo t_1
1593 mfhi t_2 1625 mfhi t_2
1594 daddu c_1,t_1 1626 slt AT,t_2,zero
1595 sltu AT,c_1,t_1
1596 daddu a2,t_2,AT
1597 daddu c_2,a2
1598 sltu AT,c_2,a2
1599 daddu c_3,AT 1627 daddu c_3,AT
1628 dsll t_2,1
1629 slt a2,t_1,zero
1630 daddu t_2,a2
1631 dsll t_1,1
1600 daddu c_1,t_1 1632 daddu c_1,t_1
1601 sltu AT,c_1,t_1 1633 sltu AT,c_1,t_1
1602 daddu t_2,AT 1634 daddu t_2,AT
@@ -1608,24 +1640,26 @@ LEAF(bn_sqr_comba8)
1608 dmultu a_4,a_0 /* mul_add_c2(a[4],b[0],c2,c3,c1); */ 1640 dmultu a_4,a_0 /* mul_add_c2(a[4],b[0],c2,c3,c1); */
1609 mflo t_1 1641 mflo t_1
1610 mfhi t_2 1642 mfhi t_2
1611 daddu c_2,t_1 1643 slt c_1,t_2,zero
1612 sltu AT,c_2,t_1 1644 dsll t_2,1
1613 daddu a2,t_2,AT 1645 slt a2,t_1,zero
1614 daddu c_3,a2 1646 daddu t_2,a2
1647 dsll t_1,1
1615 daddu c_2,t_1 1648 daddu c_2,t_1
1616 sltu AT,c_2,t_1 1649 sltu AT,c_2,t_1
1617 daddu t_2,AT 1650 daddu t_2,AT
1618 daddu c_3,t_2 1651 daddu c_3,t_2
1619 sltu c_1,c_3,t_2 1652 sltu AT,c_3,t_2
1653 daddu c_1,AT
1620 dmultu a_3,a_1 /* mul_add_c2(a[3],b[1],c2,c3,c1); */ 1654 dmultu a_3,a_1 /* mul_add_c2(a[3],b[1],c2,c3,c1); */
1621 mflo t_1 1655 mflo t_1
1622 mfhi t_2 1656 mfhi t_2
1623 daddu c_2,t_1 1657 slt AT,t_2,zero
1624 sltu AT,c_2,t_1
1625 daddu a2,t_2,AT
1626 daddu c_3,a2
1627 sltu AT,c_3,a2
1628 daddu c_1,AT 1658 daddu c_1,AT
1659 dsll t_2,1
1660 slt a2,t_1,zero
1661 daddu t_2,a2
1662 dsll t_1,1
1629 daddu c_2,t_1 1663 daddu c_2,t_1
1630 sltu AT,c_2,t_1 1664 sltu AT,c_2,t_1
1631 daddu t_2,AT 1665 daddu t_2,AT
@@ -1646,24 +1680,26 @@ LEAF(bn_sqr_comba8)
1646 dmultu a_0,a_5 /* mul_add_c2(a[0],b[5],c3,c1,c2); */ 1680 dmultu a_0,a_5 /* mul_add_c2(a[0],b[5],c3,c1,c2); */
1647 mflo t_1 1681 mflo t_1
1648 mfhi t_2 1682 mfhi t_2
1649 daddu c_3,t_1 1683 slt c_2,t_2,zero
1650 sltu AT,c_3,t_1 1684 dsll t_2,1
1651 daddu a2,t_2,AT 1685 slt a2,t_1,zero
1652 daddu c_1,a2 1686 daddu t_2,a2
1687 dsll t_1,1
1653 daddu c_3,t_1 1688 daddu c_3,t_1
1654 sltu AT,c_3,t_1 1689 sltu AT,c_3,t_1
1655 daddu t_2,AT 1690 daddu t_2,AT
1656 daddu c_1,t_2 1691 daddu c_1,t_2
1657 sltu c_2,c_1,t_2 1692 sltu AT,c_1,t_2
1693 daddu c_2,AT
1658 dmultu a_1,a_4 /* mul_add_c2(a[1],b[4],c3,c1,c2); */ 1694 dmultu a_1,a_4 /* mul_add_c2(a[1],b[4],c3,c1,c2); */
1659 mflo t_1 1695 mflo t_1
1660 mfhi t_2 1696 mfhi t_2
1661 daddu c_3,t_1 1697 slt AT,t_2,zero
1662 sltu AT,c_3,t_1
1663 daddu a2,t_2,AT
1664 daddu c_1,a2
1665 sltu AT,c_1,a2
1666 daddu c_2,AT 1698 daddu c_2,AT
1699 dsll t_2,1
1700 slt a2,t_1,zero
1701 daddu t_2,a2
1702 dsll t_1,1
1667 daddu c_3,t_1 1703 daddu c_3,t_1
1668 sltu AT,c_3,t_1 1704 sltu AT,c_3,t_1
1669 daddu t_2,AT 1705 daddu t_2,AT
@@ -1673,12 +1709,12 @@ LEAF(bn_sqr_comba8)
1673 dmultu a_2,a_3 /* mul_add_c2(a[2],b[3],c3,c1,c2); */ 1709 dmultu a_2,a_3 /* mul_add_c2(a[2],b[3],c3,c1,c2); */
1674 mflo t_1 1710 mflo t_1
1675 mfhi t_2 1711 mfhi t_2
1676 daddu c_3,t_1 1712 slt AT,t_2,zero
1677 sltu AT,c_3,t_1
1678 daddu a2,t_2,AT
1679 daddu c_1,a2
1680 sltu AT,c_1,a2
1681 daddu c_2,AT 1713 daddu c_2,AT
1714 dsll t_2,1
1715 slt a2,t_1,zero
1716 daddu t_2,a2
1717 dsll t_1,1
1682 daddu c_3,t_1 1718 daddu c_3,t_1
1683 sltu AT,c_3,t_1 1719 sltu AT,c_3,t_1
1684 daddu t_2,AT 1720 daddu t_2,AT
@@ -1690,24 +1726,26 @@ LEAF(bn_sqr_comba8)
1690 dmultu a_6,a_0 /* mul_add_c2(a[6],b[0],c1,c2,c3); */ 1726 dmultu a_6,a_0 /* mul_add_c2(a[6],b[0],c1,c2,c3); */
1691 mflo t_1 1727 mflo t_1
1692 mfhi t_2 1728 mfhi t_2
1693 daddu c_1,t_1 1729 slt c_3,t_2,zero
1694 sltu AT,c_1,t_1 1730 dsll t_2,1
1695 daddu a2,t_2,AT 1731 slt a2,t_1,zero
1696 daddu c_2,a2 1732 daddu t_2,a2
1733 dsll t_1,1
1697 daddu c_1,t_1 1734 daddu c_1,t_1
1698 sltu AT,c_1,t_1 1735 sltu AT,c_1,t_1
1699 daddu t_2,AT 1736 daddu t_2,AT
1700 daddu c_2,t_2 1737 daddu c_2,t_2
1701 sltu c_3,c_2,t_2 1738 sltu AT,c_2,t_2
1739 daddu c_3,AT
1702 dmultu a_5,a_1 /* mul_add_c2(a[5],b[1],c1,c2,c3); */ 1740 dmultu a_5,a_1 /* mul_add_c2(a[5],b[1],c1,c2,c3); */
1703 mflo t_1 1741 mflo t_1
1704 mfhi t_2 1742 mfhi t_2
1705 daddu c_1,t_1 1743 slt AT,t_2,zero
1706 sltu AT,c_1,t_1
1707 daddu a2,t_2,AT
1708 daddu c_2,a2
1709 sltu AT,c_2,a2
1710 daddu c_3,AT 1744 daddu c_3,AT
1745 dsll t_2,1
1746 slt a2,t_1,zero
1747 daddu t_2,a2
1748 dsll t_1,1
1711 daddu c_1,t_1 1749 daddu c_1,t_1
1712 sltu AT,c_1,t_1 1750 sltu AT,c_1,t_1
1713 daddu t_2,AT 1751 daddu t_2,AT
@@ -1717,12 +1755,12 @@ LEAF(bn_sqr_comba8)
1717 dmultu a_4,a_2 /* mul_add_c2(a[4],b[2],c1,c2,c3); */ 1755 dmultu a_4,a_2 /* mul_add_c2(a[4],b[2],c1,c2,c3); */
1718 mflo t_1 1756 mflo t_1
1719 mfhi t_2 1757 mfhi t_2
1720 daddu c_1,t_1 1758 slt AT,t_2,zero
1721 sltu AT,c_1,t_1
1722 daddu a2,t_2,AT
1723 daddu c_2,a2
1724 sltu AT,c_2,a2
1725 daddu c_3,AT 1759 daddu c_3,AT
1760 dsll t_2,1
1761 slt a2,t_1,zero
1762 daddu t_2,a2
1763 dsll t_1,1
1726 daddu c_1,t_1 1764 daddu c_1,t_1
1727 sltu AT,c_1,t_1 1765 sltu AT,c_1,t_1
1728 daddu t_2,AT 1766 daddu t_2,AT
@@ -1743,24 +1781,26 @@ LEAF(bn_sqr_comba8)
1743 dmultu a_0,a_7 /* mul_add_c2(a[0],b[7],c2,c3,c1); */ 1781 dmultu a_0,a_7 /* mul_add_c2(a[0],b[7],c2,c3,c1); */
1744 mflo t_1 1782 mflo t_1
1745 mfhi t_2 1783 mfhi t_2
1746 daddu c_2,t_1 1784 slt c_1,t_2,zero
1747 sltu AT,c_2,t_1 1785 dsll t_2,1
1748 daddu a2,t_2,AT 1786 slt a2,t_1,zero
1749 daddu c_3,a2 1787 daddu t_2,a2
1788 dsll t_1,1
1750 daddu c_2,t_1 1789 daddu c_2,t_1
1751 sltu AT,c_2,t_1 1790 sltu AT,c_2,t_1
1752 daddu t_2,AT 1791 daddu t_2,AT
1753 daddu c_3,t_2 1792 daddu c_3,t_2
1754 sltu c_1,c_3,t_2 1793 sltu AT,c_3,t_2
1794 daddu c_1,AT
1755 dmultu a_1,a_6 /* mul_add_c2(a[1],b[6],c2,c3,c1); */ 1795 dmultu a_1,a_6 /* mul_add_c2(a[1],b[6],c2,c3,c1); */
1756 mflo t_1 1796 mflo t_1
1757 mfhi t_2 1797 mfhi t_2
1758 daddu c_2,t_1 1798 slt AT,t_2,zero
1759 sltu AT,c_2,t_1
1760 daddu a2,t_2,AT
1761 daddu c_3,a2
1762 sltu AT,c_3,a2
1763 daddu c_1,AT 1799 daddu c_1,AT
1800 dsll t_2,1
1801 slt a2,t_1,zero
1802 daddu t_2,a2
1803 dsll t_1,1
1764 daddu c_2,t_1 1804 daddu c_2,t_1
1765 sltu AT,c_2,t_1 1805 sltu AT,c_2,t_1
1766 daddu t_2,AT 1806 daddu t_2,AT
@@ -1770,12 +1810,12 @@ LEAF(bn_sqr_comba8)
1770 dmultu a_2,a_5 /* mul_add_c2(a[2],b[5],c2,c3,c1); */ 1810 dmultu a_2,a_5 /* mul_add_c2(a[2],b[5],c2,c3,c1); */
1771 mflo t_1 1811 mflo t_1
1772 mfhi t_2 1812 mfhi t_2
1773 daddu c_2,t_1 1813 slt AT,t_2,zero
1774 sltu AT,c_2,t_1
1775 daddu a2,t_2,AT
1776 daddu c_3,a2
1777 sltu AT,c_3,a2
1778 daddu c_1,AT 1814 daddu c_1,AT
1815 dsll t_2,1
1816 slt a2,t_1,zero
1817 daddu t_2,a2
1818 dsll t_1,1
1779 daddu c_2,t_1 1819 daddu c_2,t_1
1780 sltu AT,c_2,t_1 1820 sltu AT,c_2,t_1
1781 daddu t_2,AT 1821 daddu t_2,AT
@@ -1785,12 +1825,12 @@ LEAF(bn_sqr_comba8)
1785 dmultu a_3,a_4 /* mul_add_c2(a[3],b[4],c2,c3,c1); */ 1825 dmultu a_3,a_4 /* mul_add_c2(a[3],b[4],c2,c3,c1); */
1786 mflo t_1 1826 mflo t_1
1787 mfhi t_2 1827 mfhi t_2
1788 daddu c_2,t_1 1828 slt AT,t_2,zero
1789 sltu AT,c_2,t_1
1790 daddu a2,t_2,AT
1791 daddu c_3,a2
1792 sltu AT,c_3,a2
1793 daddu c_1,AT 1829 daddu c_1,AT
1830 dsll t_2,1
1831 slt a2,t_1,zero
1832 daddu t_2,a2
1833 dsll t_1,1
1794 daddu c_2,t_1 1834 daddu c_2,t_1
1795 sltu AT,c_2,t_1 1835 sltu AT,c_2,t_1
1796 daddu t_2,AT 1836 daddu t_2,AT
@@ -1802,24 +1842,26 @@ LEAF(bn_sqr_comba8)
1802 dmultu a_7,a_1 /* mul_add_c2(a[7],b[1],c3,c1,c2); */ 1842 dmultu a_7,a_1 /* mul_add_c2(a[7],b[1],c3,c1,c2); */
1803 mflo t_1 1843 mflo t_1
1804 mfhi t_2 1844 mfhi t_2
1805 daddu c_3,t_1 1845 slt c_2,t_2,zero
1806 sltu AT,c_3,t_1 1846 dsll t_2,1
1807 daddu a2,t_2,AT 1847 slt a2,t_1,zero
1808 daddu c_1,a2 1848 daddu t_2,a2
1849 dsll t_1,1
1809 daddu c_3,t_1 1850 daddu c_3,t_1
1810 sltu AT,c_3,t_1 1851 sltu AT,c_3,t_1
1811 daddu t_2,AT 1852 daddu t_2,AT
1812 daddu c_1,t_2 1853 daddu c_1,t_2
1813 sltu c_2,c_1,t_2 1854 sltu AT,c_1,t_2
1855 daddu c_2,AT
1814 dmultu a_6,a_2 /* mul_add_c2(a[6],b[2],c3,c1,c2); */ 1856 dmultu a_6,a_2 /* mul_add_c2(a[6],b[2],c3,c1,c2); */
1815 mflo t_1 1857 mflo t_1
1816 mfhi t_2 1858 mfhi t_2
1817 daddu c_3,t_1 1859 slt AT,t_2,zero
1818 sltu AT,c_3,t_1
1819 daddu a2,t_2,AT
1820 daddu c_1,a2
1821 sltu AT,c_1,a2
1822 daddu c_2,AT 1860 daddu c_2,AT
1861 dsll t_2,1
1862 slt a2,t_1,zero
1863 daddu t_2,a2
1864 dsll t_1,1
1823 daddu c_3,t_1 1865 daddu c_3,t_1
1824 sltu AT,c_3,t_1 1866 sltu AT,c_3,t_1
1825 daddu t_2,AT 1867 daddu t_2,AT
@@ -1829,12 +1871,12 @@ LEAF(bn_sqr_comba8)
1829 dmultu a_5,a_3 /* mul_add_c2(a[5],b[3],c3,c1,c2); */ 1871 dmultu a_5,a_3 /* mul_add_c2(a[5],b[3],c3,c1,c2); */
1830 mflo t_1 1872 mflo t_1
1831 mfhi t_2 1873 mfhi t_2
1832 daddu c_3,t_1 1874 slt AT,t_2,zero
1833 sltu AT,c_3,t_1
1834 daddu a2,t_2,AT
1835 daddu c_1,a2
1836 sltu AT,c_1,a2
1837 daddu c_2,AT 1875 daddu c_2,AT
1876 dsll t_2,1
1877 slt a2,t_1,zero
1878 daddu t_2,a2
1879 dsll t_1,1
1838 daddu c_3,t_1 1880 daddu c_3,t_1
1839 sltu AT,c_3,t_1 1881 sltu AT,c_3,t_1
1840 daddu t_2,AT 1882 daddu t_2,AT
@@ -1855,24 +1897,26 @@ LEAF(bn_sqr_comba8)
1855 dmultu a_2,a_7 /* mul_add_c2(a[2],b[7],c1,c2,c3); */ 1897 dmultu a_2,a_7 /* mul_add_c2(a[2],b[7],c1,c2,c3); */
1856 mflo t_1 1898 mflo t_1
1857 mfhi t_2 1899 mfhi t_2
1858 daddu c_1,t_1 1900 slt c_3,t_2,zero
1859 sltu AT,c_1,t_1 1901 dsll t_2,1
1860 daddu a2,t_2,AT 1902 slt a2,t_1,zero
1861 daddu c_2,a2 1903 daddu t_2,a2
1904 dsll t_1,1
1862 daddu c_1,t_1 1905 daddu c_1,t_1
1863 sltu AT,c_1,t_1 1906 sltu AT,c_1,t_1
1864 daddu t_2,AT 1907 daddu t_2,AT
1865 daddu c_2,t_2 1908 daddu c_2,t_2
1866 sltu c_3,c_2,t_2 1909 sltu AT,c_2,t_2
1910 daddu c_3,AT
1867 dmultu a_3,a_6 /* mul_add_c2(a[3],b[6],c1,c2,c3); */ 1911 dmultu a_3,a_6 /* mul_add_c2(a[3],b[6],c1,c2,c3); */
1868 mflo t_1 1912 mflo t_1
1869 mfhi t_2 1913 mfhi t_2
1870 daddu c_1,t_1 1914 slt AT,t_2,zero
1871 sltu AT,c_1,t_1
1872 daddu a2,t_2,AT
1873 daddu c_2,a2
1874 sltu AT,c_2,a2
1875 daddu c_3,AT 1915 daddu c_3,AT
1916 dsll t_2,1
1917 slt a2,t_1,zero
1918 daddu t_2,a2
1919 dsll t_1,1
1876 daddu c_1,t_1 1920 daddu c_1,t_1
1877 sltu AT,c_1,t_1 1921 sltu AT,c_1,t_1
1878 daddu t_2,AT 1922 daddu t_2,AT
@@ -1882,12 +1926,12 @@ LEAF(bn_sqr_comba8)
1882 dmultu a_4,a_5 /* mul_add_c2(a[4],b[5],c1,c2,c3); */ 1926 dmultu a_4,a_5 /* mul_add_c2(a[4],b[5],c1,c2,c3); */
1883 mflo t_1 1927 mflo t_1
1884 mfhi t_2 1928 mfhi t_2
1885 daddu c_1,t_1 1929 slt AT,t_2,zero
1886 sltu AT,c_1,t_1
1887 daddu a2,t_2,AT
1888 daddu c_2,a2
1889 sltu AT,c_2,a2
1890 daddu c_3,AT 1930 daddu c_3,AT
1931 dsll t_2,1
1932 slt a2,t_1,zero
1933 daddu t_2,a2
1934 dsll t_1,1
1891 daddu c_1,t_1 1935 daddu c_1,t_1
1892 sltu AT,c_1,t_1 1936 sltu AT,c_1,t_1
1893 daddu t_2,AT 1937 daddu t_2,AT
@@ -1899,24 +1943,26 @@ LEAF(bn_sqr_comba8)
1899 dmultu a_7,a_3 /* mul_add_c2(a[7],b[3],c2,c3,c1); */ 1943 dmultu a_7,a_3 /* mul_add_c2(a[7],b[3],c2,c3,c1); */
1900 mflo t_1 1944 mflo t_1
1901 mfhi t_2 1945 mfhi t_2
1902 daddu c_2,t_1 1946 slt c_1,t_2,zero
1903 sltu AT,c_2,t_1 1947 dsll t_2,1
1904 daddu a2,t_2,AT 1948 slt a2,t_1,zero
1905 daddu c_3,a2 1949 daddu t_2,a2
1950 dsll t_1,1
1906 daddu c_2,t_1 1951 daddu c_2,t_1
1907 sltu AT,c_2,t_1 1952 sltu AT,c_2,t_1
1908 daddu t_2,AT 1953 daddu t_2,AT
1909 daddu c_3,t_2 1954 daddu c_3,t_2
1910 sltu c_1,c_3,t_2 1955 sltu AT,c_3,t_2
1956 daddu c_1,AT
1911 dmultu a_6,a_4 /* mul_add_c2(a[6],b[4],c2,c3,c1); */ 1957 dmultu a_6,a_4 /* mul_add_c2(a[6],b[4],c2,c3,c1); */
1912 mflo t_1 1958 mflo t_1
1913 mfhi t_2 1959 mfhi t_2
1914 daddu c_2,t_1 1960 slt AT,t_2,zero
1915 sltu AT,c_2,t_1
1916 daddu a2,t_2,AT
1917 daddu c_3,a2
1918 sltu AT,c_3,a2
1919 daddu c_1,AT 1961 daddu c_1,AT
1962 dsll t_2,1
1963 slt a2,t_1,zero
1964 daddu t_2,a2
1965 dsll t_1,1
1920 daddu c_2,t_1 1966 daddu c_2,t_1
1921 sltu AT,c_2,t_1 1967 sltu AT,c_2,t_1
1922 daddu t_2,AT 1968 daddu t_2,AT
@@ -1937,24 +1983,26 @@ LEAF(bn_sqr_comba8)
1937 dmultu a_4,a_7 /* mul_add_c2(a[4],b[7],c3,c1,c2); */ 1983 dmultu a_4,a_7 /* mul_add_c2(a[4],b[7],c3,c1,c2); */
1938 mflo t_1 1984 mflo t_1
1939 mfhi t_2 1985 mfhi t_2
1940 daddu c_3,t_1 1986 slt c_2,t_2,zero
1941 sltu AT,c_3,t_1 1987 dsll t_2,1
1942 daddu a2,t_2,AT 1988 slt a2,t_1,zero
1943 daddu c_1,a2 1989 daddu t_2,a2
1990 dsll t_1,1
1944 daddu c_3,t_1 1991 daddu c_3,t_1
1945 sltu AT,c_3,t_1 1992 sltu AT,c_3,t_1
1946 daddu t_2,AT 1993 daddu t_2,AT
1947 daddu c_1,t_2 1994 daddu c_1,t_2
1948 sltu c_2,c_1,t_2 1995 sltu AT,c_1,t_2
1996 daddu c_2,AT
1949 dmultu a_5,a_6 /* mul_add_c2(a[5],b[6],c3,c1,c2); */ 1997 dmultu a_5,a_6 /* mul_add_c2(a[5],b[6],c3,c1,c2); */
1950 mflo t_1 1998 mflo t_1
1951 mfhi t_2 1999 mfhi t_2
1952 daddu c_3,t_1 2000 slt AT,t_2,zero
1953 sltu AT,c_3,t_1
1954 daddu a2,t_2,AT
1955 daddu c_1,a2
1956 sltu AT,c_1,a2
1957 daddu c_2,AT 2001 daddu c_2,AT
2002 dsll t_2,1
2003 slt a2,t_1,zero
2004 daddu t_2,a2
2005 dsll t_1,1
1958 daddu c_3,t_1 2006 daddu c_3,t_1
1959 sltu AT,c_3,t_1 2007 sltu AT,c_3,t_1
1960 daddu t_2,AT 2008 daddu t_2,AT
@@ -1966,15 +2014,17 @@ LEAF(bn_sqr_comba8)
1966 dmultu a_7,a_5 /* mul_add_c2(a[7],b[5],c1,c2,c3); */ 2014 dmultu a_7,a_5 /* mul_add_c2(a[7],b[5],c1,c2,c3); */
1967 mflo t_1 2015 mflo t_1
1968 mfhi t_2 2016 mfhi t_2
1969 daddu c_1,t_1 2017 slt c_3,t_2,zero
1970 sltu AT,c_1,t_1 2018 dsll t_2,1
1971 daddu a2,t_2,AT 2019 slt a2,t_1,zero
1972 daddu c_2,a2 2020 daddu t_2,a2
2021 dsll t_1,1
1973 daddu c_1,t_1 2022 daddu c_1,t_1
1974 sltu AT,c_1,t_1 2023 sltu AT,c_1,t_1
1975 daddu t_2,AT 2024 daddu t_2,AT
1976 daddu c_2,t_2 2025 daddu c_2,t_2
1977 sltu c_3,c_2,t_2 2026 sltu AT,c_2,t_2
2027 daddu c_3,AT
1978 dmultu a_6,a_6 /* mul_add_c(a[6],b[6],c1,c2,c3); */ 2028 dmultu a_6,a_6 /* mul_add_c(a[6],b[6],c1,c2,c3); */
1979 mflo t_1 2029 mflo t_1
1980 mfhi t_2 2030 mfhi t_2
@@ -1989,15 +2039,17 @@ LEAF(bn_sqr_comba8)
1989 dmultu a_6,a_7 /* mul_add_c2(a[6],b[7],c2,c3,c1); */ 2039 dmultu a_6,a_7 /* mul_add_c2(a[6],b[7],c2,c3,c1); */
1990 mflo t_1 2040 mflo t_1
1991 mfhi t_2 2041 mfhi t_2
1992 daddu c_2,t_1 2042 slt c_1,t_2,zero
1993 sltu AT,c_2,t_1 2043 dsll t_2,1
1994 daddu a2,t_2,AT 2044 slt a2,t_1,zero
1995 daddu c_3,a2 2045 daddu t_2,a2
2046 dsll t_1,1
1996 daddu c_2,t_1 2047 daddu c_2,t_1
1997 sltu AT,c_2,t_1 2048 sltu AT,c_2,t_1
1998 daddu t_2,AT 2049 daddu t_2,AT
1999 daddu c_3,t_2 2050 daddu c_3,t_2
2000 sltu c_1,c_3,t_2 2051 sltu AT,c_3,t_2
2052 daddu c_1,AT
2001 sd c_2,104(a0) 2053 sd c_2,104(a0)
2002 2054
2003 dmultu a_7,a_7 /* mul_add_c(a[7],b[7],c3,c1,c2); */ 2055 dmultu a_7,a_7 /* mul_add_c(a[7],b[7],c3,c1,c2); */
@@ -2028,28 +2080,30 @@ LEAF(bn_sqr_comba4)
2028 dmultu a_0,a_1 /* mul_add_c2(a[0],b[1],c2,c3,c1); */ 2080 dmultu a_0,a_1 /* mul_add_c2(a[0],b[1],c2,c3,c1); */
2029 mflo t_1 2081 mflo t_1
2030 mfhi t_2 2082 mfhi t_2
2083 slt c_1,t_2,zero
2084 dsll t_2,1
2085 slt a2,t_1,zero
2086 daddu t_2,a2
2087 dsll t_1,1
2031 daddu c_2,t_1 2088 daddu c_2,t_1
2032 sltu AT,c_2,t_1 2089 sltu AT,c_2,t_1
2033 daddu c_3,t_2,AT 2090 daddu c_3,t_2,AT
2034 daddu c_2,t_1
2035 sltu AT,c_2,t_1
2036 daddu t_2,AT
2037 daddu c_3,t_2
2038 sltu c_1,c_3,t_2
2039 sd c_2,8(a0) 2091 sd c_2,8(a0)
2040 2092
2041 dmultu a_2,a_0 /* mul_add_c2(a[2],b[0],c3,c1,c2); */ 2093 dmultu a_2,a_0 /* mul_add_c2(a[2],b[0],c3,c1,c2); */
2042 mflo t_1 2094 mflo t_1
2043 mfhi t_2 2095 mfhi t_2
2044 daddu c_3,t_1 2096 slt c_2,t_2,zero
2045 sltu AT,c_3,t_1 2097 dsll t_2,1
2046 daddu a2,t_2,AT 2098 slt a2,t_1,zero
2047 daddu c_1,a2 2099 daddu t_2,a2
2100 dsll t_1,1
2048 daddu c_3,t_1 2101 daddu c_3,t_1
2049 sltu AT,c_3,t_1 2102 sltu AT,c_3,t_1
2050 daddu t_2,AT 2103 daddu t_2,AT
2051 daddu c_1,t_2 2104 daddu c_1,t_2
2052 sltu c_2,c_1,t_2 2105 sltu AT,c_1,t_2
2106 daddu c_2,AT
2053 dmultu a_1,a_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */ 2107 dmultu a_1,a_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
2054 mflo t_1 2108 mflo t_1
2055 mfhi t_2 2109 mfhi t_2
@@ -2064,24 +2118,26 @@ LEAF(bn_sqr_comba4)
2064 dmultu a_0,a_3 /* mul_add_c2(a[0],b[3],c1,c2,c3); */ 2118 dmultu a_0,a_3 /* mul_add_c2(a[0],b[3],c1,c2,c3); */
2065 mflo t_1 2119 mflo t_1
2066 mfhi t_2 2120 mfhi t_2
2067 daddu c_1,t_1 2121 slt c_3,t_2,zero
2068 sltu AT,c_1,t_1 2122 dsll t_2,1
2069 daddu a2,t_2,AT 2123 slt a2,t_1,zero
2070 daddu c_2,a2 2124 daddu t_2,a2
2125 dsll t_1,1
2071 daddu c_1,t_1 2126 daddu c_1,t_1
2072 sltu AT,c_1,t_1 2127 sltu AT,c_1,t_1
2073 daddu t_2,AT 2128 daddu t_2,AT
2074 daddu c_2,t_2 2129 daddu c_2,t_2
2075 sltu c_3,c_2,t_2 2130 sltu AT,c_2,t_2
2131 daddu c_3,AT
2076 dmultu a_1,a_2 /* mul_add_c(a2[1],b[2],c1,c2,c3); */ 2132 dmultu a_1,a_2 /* mul_add_c(a2[1],b[2],c1,c2,c3); */
2077 mflo t_1 2133 mflo t_1
2078 mfhi t_2 2134 mfhi t_2
2079 daddu c_1,t_1 2135 slt AT,t_2,zero
2080 sltu AT,c_1,t_1
2081 daddu a2,t_2,AT
2082 daddu c_2,a2
2083 sltu AT,c_2,a2
2084 daddu c_3,AT 2136 daddu c_3,AT
2137 dsll t_2,1
2138 slt a2,t_1,zero
2139 daddu t_2,a2
2140 dsll t_1,1
2085 daddu c_1,t_1 2141 daddu c_1,t_1
2086 sltu AT,c_1,t_1 2142 sltu AT,c_1,t_1
2087 daddu t_2,AT 2143 daddu t_2,AT
@@ -2093,15 +2149,17 @@ LEAF(bn_sqr_comba4)
2093 dmultu a_3,a_1 /* mul_add_c2(a[3],b[1],c2,c3,c1); */ 2149 dmultu a_3,a_1 /* mul_add_c2(a[3],b[1],c2,c3,c1); */
2094 mflo t_1 2150 mflo t_1
2095 mfhi t_2 2151 mfhi t_2
2096 daddu c_2,t_1 2152 slt c_1,t_2,zero
2097 sltu AT,c_2,t_1 2153 dsll t_2,1
2098 daddu a2,t_2,AT 2154 slt a2,t_1,zero
2099 daddu c_3,a2 2155 daddu t_2,a2
2156 dsll t_1,1
2100 daddu c_2,t_1 2157 daddu c_2,t_1
2101 sltu AT,c_2,t_1 2158 sltu AT,c_2,t_1
2102 daddu t_2,AT 2159 daddu t_2,AT
2103 daddu c_3,t_2 2160 daddu c_3,t_2
2104 sltu c_1,c_3,t_2 2161 sltu AT,c_3,t_2
2162 daddu c_1,AT
2105 dmultu a_2,a_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */ 2163 dmultu a_2,a_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
2106 mflo t_1 2164 mflo t_1
2107 mfhi t_2 2165 mfhi t_2
@@ -2116,15 +2174,17 @@ LEAF(bn_sqr_comba4)
2116 dmultu a_2,a_3 /* mul_add_c2(a[2],b[3],c3,c1,c2); */ 2174 dmultu a_2,a_3 /* mul_add_c2(a[2],b[3],c3,c1,c2); */
2117 mflo t_1 2175 mflo t_1
2118 mfhi t_2 2176 mfhi t_2
2119 daddu c_3,t_1 2177 slt c_2,t_2,zero
2120 sltu AT,c_3,t_1 2178 dsll t_2,1
2121 daddu a2,t_2,AT 2179 slt a2,t_1,zero
2122 daddu c_1,a2 2180 daddu t_2,a2
2181 dsll t_1,1
2123 daddu c_3,t_1 2182 daddu c_3,t_1
2124 sltu AT,c_3,t_1 2183 sltu AT,c_3,t_1
2125 daddu t_2,AT 2184 daddu t_2,AT
2126 daddu c_1,t_2 2185 daddu c_1,t_2
2127 sltu c_2,c_1,t_2 2186 sltu AT,c_1,t_2
2187 daddu c_2,AT
2128 sd c_3,40(a0) 2188 sd c_3,40(a0)
2129 2189
2130 dmultu a_3,a_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */ 2190 dmultu a_3,a_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
diff --git a/src/lib/libcrypto/cryptlib.c b/src/lib/libcrypto/cryptlib.c
index 9de60fd528..a7a9262133 100644
--- a/src/lib/libcrypto/cryptlib.c
+++ b/src/lib/libcrypto/cryptlib.c
@@ -241,7 +241,7 @@ void CRYPTO_destroy_dynlockid(int i)
241 } 241 }
242 else 242 else
243#endif 243#endif
244 if (--(pointer->references) <= 0) 244 if (pointer->references <= 0)
245 { 245 {
246 sk_CRYPTO_dynlock_set(dyn_locks, i, NULL); 246 sk_CRYPTO_dynlock_set(dyn_locks, i, NULL);
247 } 247 }
@@ -396,16 +396,15 @@ void CRYPTO_lock(int mode, int type, const char *file, int line)
396#endif 396#endif
397 if (type < 0) 397 if (type < 0)
398 { 398 {
399 int i = -type - 1;
400 struct CRYPTO_dynlock_value *pointer 399 struct CRYPTO_dynlock_value *pointer
401 = CRYPTO_get_dynlock_value(i); 400 = CRYPTO_get_dynlock_value(type);
402 401
403 if (pointer) 402 if (pointer && dynlock_lock_callback)
404 { 403 {
405 dynlock_lock_callback(mode, pointer, file, line); 404 dynlock_lock_callback(mode, pointer, file, line);
406 } 405 }
407 406
408 CRYPTO_destroy_dynlockid(i); 407 CRYPTO_destroy_dynlockid(type);
409 } 408 }
410 else 409 else
411 if (locking_callback != NULL) 410 if (locking_callback != NULL)
@@ -431,7 +430,6 @@ int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,
431 CRYPTO_get_lock_name(type), 430 CRYPTO_get_lock_name(type),
432 file,line); 431 file,line);
433#endif 432#endif
434 *pointer=ret;
435 } 433 }
436 else 434 else
437 { 435 {
diff --git a/src/lib/libcrypto/dsa/dsa.h b/src/lib/libcrypto/dsa/dsa.h
index 65689a3426..12b60a8faa 100644
--- a/src/lib/libcrypto/dsa/dsa.h
+++ b/src/lib/libcrypto/dsa/dsa.h
@@ -248,6 +248,7 @@ DH *DSA_dup_DH(DSA *r);
248 248
249/* Reason codes. */ 249/* Reason codes. */
250#define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100 250#define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100
251#define DSA_R_MISSING_PARAMETERS 101
251 252
252#ifdef __cplusplus 253#ifdef __cplusplus
253} 254}
diff --git a/src/lib/libcrypto/dsa/dsa_err.c b/src/lib/libcrypto/dsa/dsa_err.c
index 2b3ab3a9ad..736aeef7c4 100644
--- a/src/lib/libcrypto/dsa/dsa_err.c
+++ b/src/lib/libcrypto/dsa/dsa_err.c
@@ -85,6 +85,7 @@ static ERR_STRING_DATA DSA_str_functs[]=
85static ERR_STRING_DATA DSA_str_reasons[]= 85static ERR_STRING_DATA DSA_str_reasons[]=
86 { 86 {
87{DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE ,"data too large for key size"}, 87{DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE ,"data too large for key size"},
88{DSA_R_MISSING_PARAMETERS ,"missing parameters"},
88{0,NULL} 89{0,NULL}
89 }; 90 };
90 91
diff --git a/src/lib/libcrypto/dsa/dsa_ossl.c b/src/lib/libcrypto/dsa/dsa_ossl.c
index 5cbbdddfb9..34c6e9a141 100644
--- a/src/lib/libcrypto/dsa/dsa_ossl.c
+++ b/src/lib/libcrypto/dsa/dsa_ossl.c
@@ -108,6 +108,11 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa)
108 int i,reason=ERR_R_BN_LIB; 108 int i,reason=ERR_R_BN_LIB;
109 DSA_SIG *ret=NULL; 109 DSA_SIG *ret=NULL;
110 110
111 if (!dsa->p || !dsa->q || !dsa->g)
112 {
113 reason=DSA_R_MISSING_PARAMETERS;
114 goto err;
115 }
111 BN_init(&m); 116 BN_init(&m);
112 BN_init(&xr); 117 BN_init(&xr);
113 s=BN_new(); 118 s=BN_new();
@@ -170,6 +175,11 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)
170 BIGNUM k,*kinv=NULL,*r=NULL; 175 BIGNUM k,*kinv=NULL,*r=NULL;
171 int ret=0; 176 int ret=0;
172 177
178 if (!dsa->p || !dsa->q || !dsa->g)
179 {
180 DSAerr(DSA_F_DSA_SIGN_SETUP,DSA_R_MISSING_PARAMETERS);
181 return 0;
182 }
173 if (ctx_in == NULL) 183 if (ctx_in == NULL)
174 { 184 {
175 if ((ctx=BN_CTX_new()) == NULL) goto err; 185 if ((ctx=BN_CTX_new()) == NULL) goto err;
@@ -233,6 +243,17 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, DSA_SIG *sig,
233 BN_init(&u2); 243 BN_init(&u2);
234 BN_init(&t1); 244 BN_init(&t1);
235 245
246 if (BN_is_zero(sig->r) || sig->r->neg || BN_ucmp(sig->r, dsa->q) >= 0)
247 {
248 ret = 0;
249 goto err;
250 }
251 if (BN_is_zero(sig->s) || sig->s->neg || BN_ucmp(sig->s, dsa->q) >= 0)
252 {
253 ret = 0;
254 goto err;
255 }
256
236 /* Calculate W = inv(S) mod Q 257 /* Calculate W = inv(S) mod Q
237 * save W in u2 */ 258 * save W in u2 */
238 if ((BN_mod_inverse(&u2,sig->s,dsa->q,ctx)) == NULL) goto err; 259 if ((BN_mod_inverse(&u2,sig->s,dsa->q,ctx)) == NULL) goto err;
diff --git a/src/lib/libcrypto/evp/e_bf.c b/src/lib/libcrypto/evp/e_bf.c
index 72047f64da..53559b0b65 100644
--- a/src/lib/libcrypto/evp/e_bf.c
+++ b/src/lib/libcrypto/evp/e_bf.c
@@ -67,7 +67,7 @@ static int bf_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
67 const unsigned char *iv, int enc); 67 const unsigned char *iv, int enc);
68 68
69IMPLEMENT_BLOCK_CIPHER(bf, bf_ks, BF, bf_ks, NID_bf, 8, 16, 8, 69IMPLEMENT_BLOCK_CIPHER(bf, bf_ks, BF, bf_ks, NID_bf, 8, 16, 8,
70 0, bf_init_key, NULL, 70 EVP_CIPH_VARIABLE_LENGTH, bf_init_key, NULL,
71 EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, NULL) 71 EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, NULL)
72 72
73static int bf_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, 73static int bf_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
diff --git a/src/lib/libcrypto/evp/evp.h b/src/lib/libcrypto/evp/evp.h
index 76d417b44a..fd43127092 100644
--- a/src/lib/libcrypto/evp/evp.h
+++ b/src/lib/libcrypto/evp/evp.h
@@ -553,9 +553,9 @@ int EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
553void EVP_set_pw_prompt(char *prompt); 553void EVP_set_pw_prompt(char *prompt);
554char * EVP_get_pw_prompt(void); 554char * EVP_get_pw_prompt(void);
555 555
556int EVP_BytesToKey(const EVP_CIPHER *type,EVP_MD *md,unsigned char *salt, 556int EVP_BytesToKey(const EVP_CIPHER *type, EVP_MD *md,
557 unsigned char *data, int datal, int count, 557 const unsigned char *salt, const unsigned char *data, int datal,
558 unsigned char *key,unsigned char *iv); 558 int count, unsigned char *key, unsigned char *iv);
559 559
560int EVP_EncryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type, 560int EVP_EncryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type,
561 unsigned char *key, unsigned char *iv); 561 unsigned char *key, unsigned char *iv);
diff --git a/src/lib/libcrypto/evp/evp_key.c b/src/lib/libcrypto/evp/evp_key.c
index 09b72bf4bd..e7434ef9b2 100644
--- a/src/lib/libcrypto/evp/evp_key.c
+++ b/src/lib/libcrypto/evp/evp_key.c
@@ -95,9 +95,9 @@ int EVP_read_pw_string(char *buf, int len, const char *prompt, int verify)
95#endif 95#endif
96 } 96 }
97 97
98int EVP_BytesToKey(const EVP_CIPHER *type, EVP_MD *md, unsigned char *salt, 98int EVP_BytesToKey(const EVP_CIPHER *type, EVP_MD *md,
99 unsigned char *data, int datal, int count, unsigned char *key, 99 const unsigned char *salt, const unsigned char *data, int datal,
100 unsigned char *iv) 100 int count, unsigned char *key, unsigned char *iv)
101 { 101 {
102 EVP_MD_CTX c; 102 EVP_MD_CTX c;
103 unsigned char md_buf[EVP_MAX_MD_SIZE]; 103 unsigned char md_buf[EVP_MAX_MD_SIZE];
diff --git a/src/lib/libcrypto/opensslv.h b/src/lib/libcrypto/opensslv.h
index dc50f6d7da..4b25018e49 100644
--- a/src/lib/libcrypto/opensslv.h
+++ b/src/lib/libcrypto/opensslv.h
@@ -2,7 +2,7 @@
2#define HEADER_OPENSSLV_H 2#define HEADER_OPENSSLV_H
3 3
4/* Numeric release version identifier: 4/* Numeric release version identifier:
5 * MMNNFFPPS: major minor fix patch status 5 * MNNFFPPS: major minor fix patch status
6 * The status nibble has one of the values 0 for development, 1 to e for betas 6 * The status nibble has one of the values 0 for development, 1 to e for betas
7 * 1 to 14, and f for release. The patch level is exactly that. 7 * 1 to 14, and f for release. The patch level is exactly that.
8 * For example: 8 * For example:
@@ -25,8 +25,8 @@
25 * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for 25 * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
26 * major minor fix final patch/beta) 26 * major minor fix final patch/beta)
27 */ 27 */
28#define OPENSSL_VERSION_NUMBER 0x0090601fL 28#define OPENSSL_VERSION_NUMBER 0x0090602fL
29#define OPENSSL_VERSION_TEXT "OpenSSL 0.9.6a [engine] 5 Apr 2001" 29#define OPENSSL_VERSION_TEXT "OpenSSL 0.9.6b [engine] 9 Jul 2001"
30#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT 30#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
31 31
32 32
diff --git a/src/lib/libcrypto/perlasm/x86unix.pl b/src/lib/libcrypto/perlasm/x86unix.pl
index 309060ea00..10a7af8bff 100644
--- a/src/lib/libcrypto/perlasm/x86unix.pl
+++ b/src/lib/libcrypto/perlasm/x86unix.pl
@@ -79,7 +79,7 @@ sub main'DWP
79 local($addr,$reg1,$reg2,$idx)=@_; 79 local($addr,$reg1,$reg2,$idx)=@_;
80 80
81 $ret=""; 81 $ret="";
82 $addr =~ s/(^|[+ \t])([A-Za-z_]+)($|[+ \t])/$1$under$2$3/; 82 $addr =~ s/(^|[+ \t])([A-Za-z_]+[A-Za-z0-9_]+)($|[+ \t])/$1$under$2$3/;
83 $reg1="$regs{$reg1}" if defined($regs{$reg1}); 83 $reg1="$regs{$reg1}" if defined($regs{$reg1});
84 $reg2="$regs{$reg2}" if defined($regs{$reg2}); 84 $reg2="$regs{$reg2}" if defined($regs{$reg2});
85 $ret.=$addr if ($addr ne "") && ($addr ne 0); 85 $ret.=$addr if ($addr ne "") && ($addr ne 0);
diff --git a/src/lib/libcrypto/rand/md_rand.c b/src/lib/libcrypto/rand/md_rand.c
index ae57570608..04b9d695b0 100644
--- a/src/lib/libcrypto/rand/md_rand.c
+++ b/src/lib/libcrypto/rand/md_rand.c
@@ -141,10 +141,11 @@ static long md_count[2]={0,0};
141static double entropy=0; 141static double entropy=0;
142static int initialized=0; 142static int initialized=0;
143 143
144/* This should be set to 1 only when ssleay_rand_add() is called inside 144static unsigned int crypto_lock_rand = 0; /* may be set only when a thread
145 an already locked state, so it doesn't try to lock and thereby cause 145 * holds CRYPTO_LOCK_RAND
146 a hang. And it should always be reset back to 0 before unlocking. */ 146 * (to prevent double locking) */
147static int add_do_not_lock=0; 147static unsigned long locking_thread = 0; /* valid iff crypto_lock_rand is set */
148
148 149
149#ifdef PREDICT 150#ifdef PREDICT
150int rand_predictable=0; 151int rand_predictable=0;
@@ -191,6 +192,7 @@ static void ssleay_rand_add(const void *buf, int num, double add)
191 long md_c[2]; 192 long md_c[2];
192 unsigned char local_md[MD_DIGEST_LENGTH]; 193 unsigned char local_md[MD_DIGEST_LENGTH];
193 MD_CTX m; 194 MD_CTX m;
195 int do_not_lock;
194 196
195 /* 197 /*
196 * (Based on the rand(3) manpage) 198 * (Based on the rand(3) manpage)
@@ -207,7 +209,10 @@ static void ssleay_rand_add(const void *buf, int num, double add)
207 * hash function. 209 * hash function.
208 */ 210 */
209 211
210 if (!add_do_not_lock) CRYPTO_w_lock(CRYPTO_LOCK_RAND); 212 /* check if we already have the lock */
213 do_not_lock = crypto_lock_rand && (locking_thread == CRYPTO_thread_id());
214
215 if (!do_not_lock) CRYPTO_w_lock(CRYPTO_LOCK_RAND);
211 st_idx=state_index; 216 st_idx=state_index;
212 217
213 /* use our own copies of the counters so that even 218 /* use our own copies of the counters so that even
@@ -239,7 +244,7 @@ static void ssleay_rand_add(const void *buf, int num, double add)
239 244
240 md_count[1] += (num / MD_DIGEST_LENGTH) + (num % MD_DIGEST_LENGTH > 0); 245 md_count[1] += (num / MD_DIGEST_LENGTH) + (num % MD_DIGEST_LENGTH > 0);
241 246
242 if (!add_do_not_lock) CRYPTO_w_unlock(CRYPTO_LOCK_RAND); 247 if (!do_not_lock) CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
243 248
244 for (i=0; i<num; i+=MD_DIGEST_LENGTH) 249 for (i=0; i<num; i+=MD_DIGEST_LENGTH)
245 { 250 {
@@ -281,7 +286,7 @@ static void ssleay_rand_add(const void *buf, int num, double add)
281 } 286 }
282 memset((char *)&m,0,sizeof(m)); 287 memset((char *)&m,0,sizeof(m));
283 288
284 if (!add_do_not_lock) CRYPTO_w_lock(CRYPTO_LOCK_RAND); 289 if (!do_not_lock) CRYPTO_w_lock(CRYPTO_LOCK_RAND);
285 /* Don't just copy back local_md into md -- this could mean that 290 /* Don't just copy back local_md into md -- this could mean that
286 * other thread's seeding remains without effect (except for 291 * other thread's seeding remains without effect (except for
287 * the incremented counter). By XORing it we keep at least as 292 * the incremented counter). By XORing it we keep at least as
@@ -292,7 +297,7 @@ static void ssleay_rand_add(const void *buf, int num, double add)
292 } 297 }
293 if (entropy < ENTROPY_NEEDED) /* stop counting when we have enough */ 298 if (entropy < ENTROPY_NEEDED) /* stop counting when we have enough */
294 entropy += add; 299 entropy += add;
295 if (!add_do_not_lock) CRYPTO_w_unlock(CRYPTO_LOCK_RAND); 300 if (!do_not_lock) CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
296 301
297#if !defined(THREADS) && !defined(WIN32) 302#if !defined(THREADS) && !defined(WIN32)
298 assert(md_c[1] == md_count[1]); 303 assert(md_c[1] == md_count[1]);
@@ -340,28 +345,31 @@ static int ssleay_rand_bytes(unsigned char *buf, int num)
340 * 345 *
341 * For each group of 10 bytes (or less), we do the following: 346 * For each group of 10 bytes (or less), we do the following:
342 * 347 *
343 * Input into the hash function the top 10 bytes from the 348 * Input into the hash function the local 'md' (which is initialized from
344 * local 'md' (which is initialized from the global 'md' 349 * the global 'md' before any bytes are generated), the bytes that are to
345 * before any bytes are generated), the bytes that are 350 * be overwritten by the random bytes, and bytes from the 'state'
346 * to be overwritten by the random bytes, and bytes from the 351 * (incrementing looping index). From this digest output (which is kept
347 * 'state' (incrementing looping index). From this digest output 352 * in 'md'), the top (up to) 10 bytes are returned to the caller and the
348 * (which is kept in 'md'), the top (up to) 10 bytes are 353 * bottom 10 bytes are xored into the 'state'.
349 * returned to the caller and the bottom (up to) 10 bytes are xored 354 *
350 * into the 'state'.
351 * Finally, after we have finished 'num' random bytes for the 355 * Finally, after we have finished 'num' random bytes for the
352 * caller, 'count' (which is incremented) and the local and global 'md' 356 * caller, 'count' (which is incremented) and the local and global 'md'
353 * are fed into the hash function and the results are kept in the 357 * are fed into the hash function and the results are kept in the
354 * global 'md'. 358 * global 'md'.
355 */ 359 */
356 360
357 if (!initialized)
358 RAND_poll();
359
360 CRYPTO_w_lock(CRYPTO_LOCK_RAND); 361 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
361 add_do_not_lock = 1; /* Since we call ssleay_rand_add while in
362 this locked state. */
363 362
364 initialized = 1; 363 /* prevent ssleay_rand_bytes() from trying to obtain the lock again */
364 crypto_lock_rand = 1;
365 locking_thread = CRYPTO_thread_id();
366
367 if (!initialized)
368 {
369 RAND_poll();
370 initialized = 1;
371 }
372
365 if (!stirred_pool) 373 if (!stirred_pool)
366 do_stir_pool = 1; 374 do_stir_pool = 1;
367 375
@@ -387,11 +395,11 @@ static int ssleay_rand_bytes(unsigned char *buf, int num)
387 395
388 if (do_stir_pool) 396 if (do_stir_pool)
389 { 397 {
390 /* Our output function chains only half of 'md', so we better 398 /* In the output function only half of 'md' remains secret,
391 * make sure that the required entropy gets 'evenly distributed' 399 * so we better make sure that the required entropy gets
392 * through 'state', our randomness pool. The input function 400 * 'evenly distributed' through 'state', our randomness pool.
393 * (ssleay_rand_add) chains all of 'md', which makes it more 401 * The input function (ssleay_rand_add) chains all of 'md',
394 * suitable for this purpose. 402 * which makes it more suitable for this purpose.
395 */ 403 */
396 404
397 int n = STATE_SIZE; /* so that the complete pool gets accessed */ 405 int n = STATE_SIZE; /* so that the complete pool gets accessed */
@@ -425,8 +433,9 @@ static int ssleay_rand_bytes(unsigned char *buf, int num)
425 433
426 md_count[0] += 1; 434 md_count[0] += 1;
427 435
428 add_do_not_lock = 0; /* If this would ever be forgotten, we can 436 /* before unlocking, we must clear 'crypto_lock_rand' */
429 expect any evil god to eat our souls. */ 437 crypto_lock_rand = 0;
438 locking_thread = 0;
430 CRYPTO_w_unlock(CRYPTO_LOCK_RAND); 439 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
431 440
432 while (num > 0) 441 while (num > 0)
@@ -492,11 +501,12 @@ static int ssleay_rand_bytes(unsigned char *buf, int num)
492static int ssleay_rand_pseudo_bytes(unsigned char *buf, int num) 501static int ssleay_rand_pseudo_bytes(unsigned char *buf, int num)
493 { 502 {
494 int ret; 503 int ret;
504 unsigned long err;
495 505
496 ret = RAND_bytes(buf, num); 506 ret = RAND_bytes(buf, num);
497 if (ret == 0) 507 if (ret == 0)
498 { 508 {
499 long err = ERR_peek_error(); 509 err = ERR_peek_error();
500 if (ERR_GET_LIB(err) == ERR_LIB_RAND && 510 if (ERR_GET_LIB(err) == ERR_LIB_RAND &&
501 ERR_GET_REASON(err) == RAND_R_PRNG_NOT_SEEDED) 511 ERR_GET_REASON(err) == RAND_R_PRNG_NOT_SEEDED)
502 (void)ERR_get_error(); 512 (void)ERR_get_error();
@@ -507,14 +517,37 @@ static int ssleay_rand_pseudo_bytes(unsigned char *buf, int num)
507static int ssleay_rand_status(void) 517static int ssleay_rand_status(void)
508 { 518 {
509 int ret; 519 int ret;
520 int do_not_lock;
510 521
522 /* check if we already have the lock
523 * (could happen if a RAND_poll() implementation calls RAND_status()) */
524 do_not_lock = crypto_lock_rand && (locking_thread == CRYPTO_thread_id());
525
526 if (!do_not_lock)
527 {
528 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
529
530 /* prevent ssleay_rand_bytes() from trying to obtain the lock again */
531 crypto_lock_rand = 1;
532 locking_thread = CRYPTO_thread_id();
533 }
534
511 if (!initialized) 535 if (!initialized)
536 {
512 RAND_poll(); 537 RAND_poll();
538 initialized = 1;
539 }
513 540
514 CRYPTO_w_lock(CRYPTO_LOCK_RAND);
515 initialized = 1;
516 ret = entropy >= ENTROPY_NEEDED; 541 ret = entropy >= ENTROPY_NEEDED;
517 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
518 542
543 if (!do_not_lock)
544 {
545 /* before unlocking, we must clear 'crypto_lock_rand' */
546 crypto_lock_rand = 0;
547 locking_thread = 0;
548
549 CRYPTO_w_unlock(CRYPTO_LOCK_RAND);
550 }
551
519 return ret; 552 return ret;
520 } 553 }
diff --git a/src/lib/libcrypto/rand/randfile.c b/src/lib/libcrypto/rand/randfile.c
index f4376cf8cc..2ffb84c89e 100644
--- a/src/lib/libcrypto/rand/randfile.c
+++ b/src/lib/libcrypto/rand/randfile.c
@@ -233,6 +233,12 @@ const char *RAND_file_name(char *buf, size_t size)
233 { 233 {
234 if (issetugid() == 0) 234 if (issetugid() == 0)
235 s=getenv("HOME"); 235 s=getenv("HOME");
236#ifdef DEFAULT_HOME
237 if (s == NULL)
238 {
239 s = DEFAULT_HOME;
240 }
241#endif
236 if (s && *s && strlen(s)+strlen(RFILE)+2 < size) 242 if (s && *s && strlen(s)+strlen(RFILE)+2 < size)
237 { 243 {
238 strlcpy(buf,s,size); 244 strlcpy(buf,s,size);
@@ -242,7 +248,7 @@ const char *RAND_file_name(char *buf, size_t size)
242 strlcat(buf,RFILE,size); 248 strlcat(buf,RFILE,size);
243 ret=buf; 249 ret=buf;
244 } 250 }
245 else 251 else
246 buf[0] = '\0'; /* no file name */ 252 buf[0] = '\0'; /* no file name */
247 } 253 }
248 254
diff --git a/src/lib/libcrypto/rsa/rsa_oaep.c b/src/lib/libcrypto/rsa/rsa_oaep.c
index fd0b7f361f..1849e55cd5 100644
--- a/src/lib/libcrypto/rsa/rsa_oaep.c
+++ b/src/lib/libcrypto/rsa/rsa_oaep.c
@@ -77,14 +77,16 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
77 int i, dblen, mlen = -1; 77 int i, dblen, mlen = -1;
78 unsigned char *maskeddb; 78 unsigned char *maskeddb;
79 int lzero; 79 int lzero;
80 unsigned char *db, seed[SHA_DIGEST_LENGTH], phash[SHA_DIGEST_LENGTH]; 80 unsigned char *db = NULL, seed[SHA_DIGEST_LENGTH], phash[SHA_DIGEST_LENGTH];
81 81
82 if (--num < 2 * SHA_DIGEST_LENGTH + 1) 82 if (--num < 2 * SHA_DIGEST_LENGTH + 1)
83 { 83 goto decoding_err;
84 RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, RSA_R_OAEP_DECODING_ERROR);
85 return (-1);
86 }
87 84
85 lzero = num - flen;
86 if (lzero < 0)
87 goto decoding_err;
88 maskeddb = from - lzero + SHA_DIGEST_LENGTH;
89
88 dblen = num - SHA_DIGEST_LENGTH; 90 dblen = num - SHA_DIGEST_LENGTH;
89 db = OPENSSL_malloc(dblen); 91 db = OPENSSL_malloc(dblen);
90 if (db == NULL) 92 if (db == NULL)
@@ -93,9 +95,6 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
93 return (-1); 95 return (-1);
94 } 96 }
95 97
96 lzero = num - flen;
97 maskeddb = from - lzero + SHA_DIGEST_LENGTH;
98
99 MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen); 98 MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen);
100 for (i = lzero; i < SHA_DIGEST_LENGTH; i++) 99 for (i = lzero; i < SHA_DIGEST_LENGTH; i++)
101 seed[i] ^= from[i - lzero]; 100 seed[i] ^= from[i - lzero];
@@ -107,21 +106,20 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
107 SHA1(param, plen, phash); 106 SHA1(param, plen, phash);
108 107
109 if (memcmp(db, phash, SHA_DIGEST_LENGTH) != 0) 108 if (memcmp(db, phash, SHA_DIGEST_LENGTH) != 0)
110 RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, RSA_R_OAEP_DECODING_ERROR); 109 goto decoding_err;
111 else 110 else
112 { 111 {
113 for (i = SHA_DIGEST_LENGTH; i < dblen; i++) 112 for (i = SHA_DIGEST_LENGTH; i < dblen; i++)
114 if (db[i] != 0x00) 113 if (db[i] != 0x00)
115 break; 114 break;
116 if (db[i] != 0x01 || i++ >= dblen) 115 if (db[i] != 0x01 || i++ >= dblen)
117 RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, 116 goto decoding_err;
118 RSA_R_OAEP_DECODING_ERROR);
119 else 117 else
120 { 118 {
121 mlen = dblen - i; 119 mlen = dblen - i;
122 if (tlen < mlen) 120 if (tlen < mlen)
123 { 121 {
124 RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP, RSA_R_DATA_TOO_LARGE); 122 RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, RSA_R_DATA_TOO_LARGE);
125 mlen = -1; 123 mlen = -1;
126 } 124 }
127 else 125 else
@@ -130,6 +128,13 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
130 } 128 }
131 OPENSSL_free(db); 129 OPENSSL_free(db);
132 return (mlen); 130 return (mlen);
131
132decoding_err:
133 /* to avoid chosen ciphertext attacks, the error message should not reveal
134 * which kind of decoding error happened */
135 RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, RSA_R_OAEP_DECODING_ERROR);
136 if (db != NULL) OPENSSL_free(db);
137 return -1;
133 } 138 }
134 139
135int MGF1(unsigned char *mask, long len, unsigned char *seed, long seedlen) 140int MGF1(unsigned char *mask, long len, unsigned char *seed, long seedlen)
diff --git a/src/lib/libcrypto/x509/x509_obj.c b/src/lib/libcrypto/x509/x509_obj.c
index 6a3ba8eb15..f0271fdfa1 100644
--- a/src/lib/libcrypto/x509/x509_obj.c
+++ b/src/lib/libcrypto/x509/x509_obj.c
@@ -214,6 +214,8 @@ int i;
214 } 214 }
215 else 215 else
216 p=buf; 216 p=buf;
217 if (i == 0)
218 *p = '\0';
217 return(p); 219 return(p);
218err: 220err:
219 X509err(X509_F_X509_NAME_ONELINE,ERR_R_MALLOC_FAILURE); 221 X509err(X509_F_X509_NAME_ONELINE,ERR_R_MALLOC_FAILURE);
diff --git a/src/lib/libcrypto/x509/x509_trs.c b/src/lib/libcrypto/x509/x509_trs.c
index a7b1543461..86b3b79dcc 100644
--- a/src/lib/libcrypto/x509/x509_trs.c
+++ b/src/lib/libcrypto/x509/x509_trs.c
@@ -228,7 +228,8 @@ int X509_TRUST_get_trust(X509_TRUST *xp)
228 228
229static int trust_1oidany(X509_TRUST *trust, X509 *x, int flags) 229static int trust_1oidany(X509_TRUST *trust, X509 *x, int flags)
230{ 230{
231 if(x->aux) return obj_trust(trust->arg1, x, flags); 231 if(x->aux && (x->aux->trust || x->aux->reject))
232 return obj_trust(trust->arg1, x, flags);
232 /* we don't have any trust settings: for compatibility 233 /* we don't have any trust settings: for compatibility
233 * we return trusted if it is self signed 234 * we return trusted if it is self signed
234 */ 235 */