diff options
Diffstat (limited to 'src/lib/libcrypto')
-rw-r--r-- | src/lib/libcrypto/asn1/t_x509.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/x_pubkey.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/bio/b_print.c | 14 | ||||
-rw-r--r-- | src/lib/libcrypto/bio/bf_buff.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/bn/asm/mips3.s | 430 | ||||
-rw-r--r-- | src/lib/libcrypto/cryptlib.c | 10 | ||||
-rw-r--r-- | src/lib/libcrypto/dsa/dsa.h | 1 | ||||
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_err.c | 1 | ||||
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_ossl.c | 21 | ||||
-rw-r--r-- | src/lib/libcrypto/evp/e_bf.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/evp/evp.h | 6 | ||||
-rw-r--r-- | src/lib/libcrypto/evp/evp_key.c | 6 | ||||
-rw-r--r-- | src/lib/libcrypto/opensslv.h | 6 | ||||
-rw-r--r-- | src/lib/libcrypto/perlasm/x86unix.pl | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/rand/md_rand.c | 99 | ||||
-rw-r--r-- | src/lib/libcrypto/rand/randfile.c | 8 | ||||
-rw-r--r-- | src/lib/libcrypto/rsa/rsa_oaep.c | 29 | ||||
-rw-r--r-- | src/lib/libcrypto/x509/x509_obj.c | 2 | ||||
-rw-r--r-- | src/lib/libcrypto/x509/x509_trs.c | 3 |
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 | ||
157 | static void | 161 | static 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); | |||
70 | static int buffer_new(BIO *h); | 70 | static int buffer_new(BIO *h); |
71 | static int buffer_free(BIO *data); | 71 | static int buffer_free(BIO *data); |
72 | static long buffer_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp); | 72 | static 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 | ||
75 | static BIO_METHOD methods_buffer= | 75 | static 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[]= | |||
85 | static ERR_STRING_DATA DSA_str_reasons[]= | 85 | static 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 | ||
69 | IMPLEMENT_BLOCK_CIPHER(bf, bf_ks, BF, bf_ks, NID_bf, 8, 16, 8, | 69 | IMPLEMENT_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 | ||
73 | static int bf_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, | 73 | static 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); | |||
553 | void EVP_set_pw_prompt(char *prompt); | 553 | void EVP_set_pw_prompt(char *prompt); |
554 | char * EVP_get_pw_prompt(void); | 554 | char * EVP_get_pw_prompt(void); |
555 | 555 | ||
556 | int EVP_BytesToKey(const EVP_CIPHER *type,EVP_MD *md,unsigned char *salt, | 556 | int 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 | ||
560 | int EVP_EncryptInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type, | 560 | int 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 | ||
98 | int EVP_BytesToKey(const EVP_CIPHER *type, EVP_MD *md, unsigned char *salt, | 98 | int 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}; | |||
141 | static double entropy=0; | 141 | static double entropy=0; |
142 | static int initialized=0; | 142 | static int initialized=0; |
143 | 143 | ||
144 | /* This should be set to 1 only when ssleay_rand_add() is called inside | 144 | static 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) */ |
147 | static int add_do_not_lock=0; | 147 | static unsigned long locking_thread = 0; /* valid iff crypto_lock_rand is set */ |
148 | |||
148 | 149 | ||
149 | #ifdef PREDICT | 150 | #ifdef PREDICT |
150 | int rand_predictable=0; | 151 | int 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) | |||
492 | static int ssleay_rand_pseudo_bytes(unsigned char *buf, int num) | 501 | static 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) | |||
507 | static int ssleay_rand_status(void) | 517 | static 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 | |||
132 | decoding_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 | ||
135 | int MGF1(unsigned char *mask, long len, unsigned char *seed, long seedlen) | 140 | int 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); |
218 | err: | 220 | err: |
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 | ||
229 | static int trust_1oidany(X509_TRUST *trust, X509 *x, int flags) | 229 | static 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 | */ |