| OLD | NEW |
| 1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
| 2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
| 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| 4 /* | 4 /* |
| 5 * nss_pkix_proxy.h | 5 * nss_pkix_proxy.h |
| 6 * | 6 * |
| 7 * PKIX - NSS proxy functions | 7 * PKIX - NSS proxy functions |
| 8 * | 8 * |
| 9 * NOTE: All structures, functions, data types are parts of library private | 9 * NOTE: All structures, functions, data types are parts of library private |
| 10 * api and are subjects to change in any following releases. | 10 * api and are subjects to change in any following releases. |
| 11 * | 11 * |
| 12 */ | 12 */ |
| 13 #include "prerror.h" | 13 #include "prerror.h" |
| 14 #include "prprf.h" | 14 #include "prprf.h" |
| 15 | 15 |
| 16 #include "nspr.h" | 16 #include "nspr.h" |
| 17 #include "pk11func.h" | 17 #include "pk11func.h" |
| 18 #include "certdb.h" | 18 #include "certdb.h" |
| 19 #include "cert.h" | 19 #include "cert.h" |
| 20 #include "secerr.h" | 20 #include "secerr.h" |
| 21 #include "nssb64.h" | 21 #include "nssb64.h" |
| 22 #include "secasn1.h" | 22 #include "secasn1.h" |
| 23 #include "secder.h" | 23 #include "secder.h" |
| 24 #include "pkit.h" | 24 #include "pkit.h" |
| 25 | 25 |
| 26 #include "pkix_pl_common.h" | 26 #include "pkix_pl_common.h" |
| 27 | 27 |
| 28 extern PRLogModuleInfo *pkixLog; | 28 extern PRLogModuleInfo *pkixLog; |
| 29 | 29 |
| 30 #ifdef DEBUG_volkov | |
| 31 /* Temporary declarations of functioins. Will be removed with fix for | |
| 32 * 391183 */ | |
| 33 extern char * | |
| 34 pkix_Error2ASCII(PKIX_Error *error, void *plContext); | |
| 35 | |
| 36 extern void | |
| 37 cert_PrintCert(PKIX_PL_Cert *pkixCert, void *plContext); | |
| 38 | |
| 39 extern PKIX_Error * | |
| 40 cert_PrintCertChain(PKIX_List *pkixCertChain, void *plContext); | |
| 41 | |
| 42 #endif /* DEBUG */ | |
| 43 | |
| 44 #ifdef PKIX_OBJECT_LEAK_TEST | 30 #ifdef PKIX_OBJECT_LEAK_TEST |
| 45 | 31 |
| 46 extern PKIX_UInt32 | 32 extern PKIX_UInt32 |
| 47 pkix_pl_lifecycle_ObjectLeakCheck(int *); | 33 pkix_pl_lifecycle_ObjectLeakCheck(int *); |
| 48 | 34 |
| 49 extern SECStatus | 35 extern SECStatus |
| 50 pkix_pl_lifecycle_ObjectTableUpdate(int *objCountTable); | 36 pkix_pl_lifecycle_ObjectTableUpdate(int *objCountTable); |
| 51 | 37 |
| 52 PRInt32 parallelFnInvocationCount; | 38 PRInt32 parallelFnInvocationCount; |
| 53 #endif /* PKIX_OBJECT_LEAK_TEST */ | 39 #endif /* PKIX_OBJECT_LEAK_TEST */ |
| (...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 891 PKIX_List *children = NULL; | 877 PKIX_List *children = NULL; |
| 892 PKIX_VerifyNode *childNode = NULL; | 878 PKIX_VerifyNode *childNode = NULL; |
| 893 | 879 |
| 894 PKIX_ENTER(CERTVFYPKIX, "cert_GetLogFromVerifyNode"); | 880 PKIX_ENTER(CERTVFYPKIX, "cert_GetLogFromVerifyNode"); |
| 895 | 881 |
| 896 children = node->children; | 882 children = node->children; |
| 897 | 883 |
| 898 if (children == NULL) { | 884 if (children == NULL) { |
| 899 PKIX_ERRORCODE errCode = PKIX_ANCHORDIDNOTCHAINTOCERT; | 885 PKIX_ERRORCODE errCode = PKIX_ANCHORDIDNOTCHAINTOCERT; |
| 900 if (node->error && node->error->errCode != errCode) { | 886 if (node->error && node->error->errCode != errCode) { |
| 901 #ifdef DEBUG_volkov | |
| 902 char *string = pkix_Error2ASCII(node->error, plContext); | |
| 903 fprintf(stderr, "Branch search finished with error: \t%s\n", string)
; | |
| 904 PKIX_PL_Free(string, NULL); | |
| 905 #endif | |
| 906 if (log != NULL) { | 887 if (log != NULL) { |
| 907 SECErrorCodes nssErrorCode = 0; | 888 SECErrorCodes nssErrorCode = 0; |
| 908 CERTCertificate *cert = NULL; | 889 CERTCertificate *cert = NULL; |
| 909 | 890 |
| 910 cert = node->verifyCert->nssCert; | 891 cert = node->verifyCert->nssCert; |
| 911 | 892 |
| 912 PKIX_CHECK( | 893 PKIX_CHECK( |
| 913 cert_PkixErrorToNssCode(node->error, &nssErrorCode, | 894 cert_PkixErrorToNssCode(node->error, &nssErrorCode, |
| 914 plContext), | 895 plContext), |
| 915 PKIX_GETPKIXERRORCODEFAILED); | 896 PKIX_GETPKIXERRORCODEFAILED); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 996 CERTCertificate **ptrustedRoot, | 977 CERTCertificate **ptrustedRoot, |
| 997 CERTCertList **pvalidChain, | 978 CERTCertList **pvalidChain, |
| 998 void *plContext) | 979 void *plContext) |
| 999 { | 980 { |
| 1000 PKIX_ValidateResult *validResult = NULL; | 981 PKIX_ValidateResult *validResult = NULL; |
| 1001 CERTCertList *validChain = NULL; | 982 CERTCertList *validChain = NULL; |
| 1002 CERTCertificate *trustedRoot = NULL; | 983 CERTCertificate *trustedRoot = NULL; |
| 1003 PKIX_TrustAnchor *trustAnchor = NULL; | 984 PKIX_TrustAnchor *trustAnchor = NULL; |
| 1004 PKIX_PL_Cert *trustedCert = NULL; | 985 PKIX_PL_Cert *trustedCert = NULL; |
| 1005 PKIX_List *pkixCertChain = NULL; | 986 PKIX_List *pkixCertChain = NULL; |
| 1006 #ifdef DEBUG_volkov | |
| 1007 PKIX_Error *tmpPkixError = NULL; | |
| 1008 #endif /* DEBUG */ | |
| 1009 | 987 |
| 1010 PKIX_ENTER(CERTVFYPKIX, "cert_GetBuildResults"); | 988 PKIX_ENTER(CERTVFYPKIX, "cert_GetBuildResults"); |
| 1011 if (buildResult == NULL && error == NULL) { | 989 if (buildResult == NULL && error == NULL) { |
| 1012 PKIX_ERROR(PKIX_NULLARGUMENT); | 990 PKIX_ERROR(PKIX_NULLARGUMENT); |
| 1013 } | 991 } |
| 1014 | 992 |
| 1015 if (error) { | 993 if (error) { |
| 1016 SECErrorCodes nssErrorCode = 0; | 994 SECErrorCodes nssErrorCode = 0; |
| 1017 #ifdef DEBUG_volkov | |
| 1018 char *temp = pkix_Error2ASCII(error, plContext); | |
| 1019 fprintf(stderr, "BUILD ERROR:\n%s\n", temp); | |
| 1020 PKIX_PL_Free(temp, NULL); | |
| 1021 #endif /* DEBUG */ | |
| 1022 if (verifyNode) { | 995 if (verifyNode) { |
| 1023 PKIX_Error *tmpError = | 996 PKIX_Error *tmpError = |
| 1024 cert_GetLogFromVerifyNode(log, verifyNode, plContext); | 997 cert_GetLogFromVerifyNode(log, verifyNode, plContext); |
| 1025 if (tmpError) { | 998 if (tmpError) { |
| 1026 PKIX_PL_Object_DecRef((PKIX_PL_Object *)tmpError, plContext); | 999 PKIX_PL_Object_DecRef((PKIX_PL_Object *)tmpError, plContext); |
| 1027 } | 1000 } |
| 1028 } | 1001 } |
| 1029 cert_PkixErrorToNssCode(error, &nssErrorCode, plContext); | 1002 cert_PkixErrorToNssCode(error, &nssErrorCode, plContext); |
| 1030 PORT_SetError(nssErrorCode); | 1003 PORT_SetError(nssErrorCode); |
| 1031 goto cleanup; | 1004 goto cleanup; |
| 1032 } | 1005 } |
| 1033 | 1006 |
| 1034 if (pvalidChain) { | 1007 if (pvalidChain) { |
| 1035 PKIX_CHECK( | 1008 PKIX_CHECK( |
| 1036 PKIX_BuildResult_GetCertChain(buildResult, &pkixCertChain, | 1009 PKIX_BuildResult_GetCertChain(buildResult, &pkixCertChain, |
| 1037 plContext), | 1010 plContext), |
| 1038 PKIX_BUILDRESULTGETCERTCHAINFAILED); | 1011 PKIX_BUILDRESULTGETCERTCHAINFAILED); |
| 1039 | 1012 |
| 1040 #ifdef DEBUG_volkov | |
| 1041 tmpPkixError = cert_PrintCertChain(pkixCertChain, plContext); | |
| 1042 if (tmpPkixError) { | |
| 1043 PKIX_PL_Object_DecRef((PKIX_PL_Object*)tmpPkixError, plContext); | |
| 1044 } | |
| 1045 #endif | |
| 1046 | |
| 1047 PKIX_CHECK( | 1013 PKIX_CHECK( |
| 1048 cert_PkixToNssCertsChain(pkixCertChain, &validChain, plContext), | 1014 cert_PkixToNssCertsChain(pkixCertChain, &validChain, plContext), |
| 1049 PKIX_CERTCHAINTONSSCHAINFAILED); | 1015 PKIX_CERTCHAINTONSSCHAINFAILED); |
| 1050 } | 1016 } |
| 1051 | 1017 |
| 1052 if (ptrustedRoot) { | 1018 if (ptrustedRoot) { |
| 1053 PKIX_CHECK( | 1019 PKIX_CHECK( |
| 1054 PKIX_BuildResult_GetValidateResult(buildResult, &validResult, | 1020 PKIX_BuildResult_GetValidateResult(buildResult, &validResult, |
| 1055 plContext), | 1021 plContext), |
| 1056 PKIX_BUILDRESULTGETVALIDATERESULTFAILED); | 1022 PKIX_BUILDRESULTGETVALIDATERESULTFAILED); |
| 1057 | 1023 |
| 1058 PKIX_CHECK( | 1024 PKIX_CHECK( |
| 1059 PKIX_ValidateResult_GetTrustAnchor(validResult, &trustAnchor, | 1025 PKIX_ValidateResult_GetTrustAnchor(validResult, &trustAnchor, |
| 1060 plContext), | 1026 plContext), |
| 1061 PKIX_VALIDATERESULTGETTRUSTANCHORFAILED); | 1027 PKIX_VALIDATERESULTGETTRUSTANCHORFAILED); |
| 1062 | 1028 |
| 1063 PKIX_CHECK( | 1029 PKIX_CHECK( |
| 1064 PKIX_TrustAnchor_GetTrustedCert(trustAnchor, &trustedCert, | 1030 PKIX_TrustAnchor_GetTrustedCert(trustAnchor, &trustedCert, |
| 1065 plContext), | 1031 plContext), |
| 1066 PKIX_TRUSTANCHORGETTRUSTEDCERTFAILED); | 1032 PKIX_TRUSTANCHORGETTRUSTEDCERTFAILED); |
| 1067 | 1033 |
| 1068 #ifdef DEBUG_volkov | 1034 PKIX_CHECK( |
| 1069 if (pvalidChain == NULL) { | |
| 1070 cert_PrintCert(trustedCert, plContext); | |
| 1071 } | |
| 1072 #endif | |
| 1073 | |
| 1074 PKIX_CHECK( | |
| 1075 PKIX_PL_Cert_GetCERTCertificate(trustedCert, &trustedRoot, | 1035 PKIX_PL_Cert_GetCERTCertificate(trustedCert, &trustedRoot, |
| 1076 plContext), | 1036 plContext), |
| 1077 PKIX_CERTGETCERTCERTIFICATEFAILED); | 1037 PKIX_CERTGETCERTCERTIFICATEFAILED); |
| 1078 } | 1038 } |
| 1079 | 1039 |
| 1080 PORT_Assert(!PKIX_ERROR_RECEIVED); | 1040 PORT_Assert(!PKIX_ERROR_RECEIVED); |
| 1081 | 1041 |
| 1082 if (trustedRoot) { | 1042 if (trustedRoot) { |
| 1083 *ptrustedRoot = trustedRoot; | 1043 *ptrustedRoot = trustedRoot; |
| 1084 } | 1044 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1151 PRBool *pSigerror, | 1111 PRBool *pSigerror, |
| 1152 PRBool *pRevoked) | 1112 PRBool *pRevoked) |
| 1153 { | 1113 { |
| 1154 PKIX_ProcessingParams *procParams = NULL; | 1114 PKIX_ProcessingParams *procParams = NULL; |
| 1155 PKIX_BuildResult *result = NULL; | 1115 PKIX_BuildResult *result = NULL; |
| 1156 PKIX_VerifyNode *verifyNode = NULL; | 1116 PKIX_VerifyNode *verifyNode = NULL; |
| 1157 PKIX_Error *error = NULL; | 1117 PKIX_Error *error = NULL; |
| 1158 | 1118 |
| 1159 SECStatus rv = SECFailure; | 1119 SECStatus rv = SECFailure; |
| 1160 void *plContext = NULL; | 1120 void *plContext = NULL; |
| 1161 #ifdef DEBUG_volkov | |
| 1162 CERTCertificate *trustedRoot = NULL; | |
| 1163 CERTCertList *validChain = NULL; | |
| 1164 #endif /* DEBUG */ | |
| 1165 | 1121 |
| 1166 #ifdef PKIX_OBJECT_LEAK_TEST | 1122 #ifdef PKIX_OBJECT_LEAK_TEST |
| 1167 int leakedObjNum = 0; | 1123 int leakedObjNum = 0; |
| 1168 int memLeakLoopCount = 0; | 1124 int memLeakLoopCount = 0; |
| 1169 int objCountTable[PKIX_NUMTYPES]; | 1125 int objCountTable[PKIX_NUMTYPES]; |
| 1170 int fnInvLocalCount = 0; | 1126 int fnInvLocalCount = 0; |
| 1171 PKIX_Boolean savedUsePkixEngFlag = usePKIXValidationEngine; | 1127 PKIX_Boolean savedUsePkixEngFlag = usePKIXValidationEngine; |
| 1172 | 1128 |
| 1173 if (usePKIXValidationEngine) { | 1129 if (usePKIXValidationEngine) { |
| 1174 /* current memory leak testing implementation does not allow | 1130 /* current memory leak testing implementation does not allow |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1189 fnInvLocalCount = PR_ATOMIC_INCREMENT(¶llelFnInvocationCount); | 1145 fnInvLocalCount = PR_ATOMIC_INCREMENT(¶llelFnInvocationCount); |
| 1190 PORT_Assert(fnInvLocalCount == 1); | 1146 PORT_Assert(fnInvLocalCount == 1); |
| 1191 | 1147 |
| 1192 do { | 1148 do { |
| 1193 rv = SECFailure; | 1149 rv = SECFailure; |
| 1194 plContext = NULL; | 1150 plContext = NULL; |
| 1195 procParams = NULL; | 1151 procParams = NULL; |
| 1196 result = NULL; | 1152 result = NULL; |
| 1197 verifyNode = NULL; | 1153 verifyNode = NULL; |
| 1198 error = NULL; | 1154 error = NULL; |
| 1199 #ifdef DEBUG_volkov | |
| 1200 trustedRoot = NULL; | |
| 1201 validChain = NULL; | |
| 1202 #endif /* DEBUG */ | |
| 1203 errorGenerated = PKIX_FALSE; | 1155 errorGenerated = PKIX_FALSE; |
| 1204 stackPosition = 0; | 1156 stackPosition = 0; |
| 1205 | 1157 |
| 1206 if (leakedObjNum) { | 1158 if (leakedObjNum) { |
| 1207 pkix_pl_lifecycle_ObjectTableUpdate(objCountTable); | 1159 pkix_pl_lifecycle_ObjectTableUpdate(objCountTable); |
| 1208 } | 1160 } |
| 1209 memLeakLoopCount += 1; | 1161 memLeakLoopCount += 1; |
| 1210 #endif /* PKIX_OBJECT_LEAK_TEST */ | 1162 #endif /* PKIX_OBJECT_LEAK_TEST */ |
| 1211 | 1163 |
| 1212 error = | 1164 error = |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1235 /* Currently always PR_FALSE. Will be fixed as a part of 394077 */ | 1187 /* Currently always PR_FALSE. Will be fixed as a part of 394077 */ |
| 1236 *pRevoked = PR_FALSE; | 1188 *pRevoked = PR_FALSE; |
| 1237 } | 1189 } |
| 1238 if (pSigerror) { | 1190 if (pSigerror) { |
| 1239 /* Currently always PR_FALSE. Will be fixed as a part of 394077 */ | 1191 /* Currently always PR_FALSE. Will be fixed as a part of 394077 */ |
| 1240 *pSigerror = PR_FALSE; | 1192 *pSigerror = PR_FALSE; |
| 1241 } | 1193 } |
| 1242 rv = SECSuccess; | 1194 rv = SECSuccess; |
| 1243 | 1195 |
| 1244 cleanup: | 1196 cleanup: |
| 1245 error = cert_GetBuildResults(result, verifyNode, error, log, | 1197 error = cert_GetBuildResults(result, verifyNode, error, log, NULL, NULL, |
| 1246 #ifdef DEBUG_volkov | |
| 1247 &trustedRoot, &validChain, | |
| 1248 #else | |
| 1249 NULL, NULL, | |
| 1250 #endif /* DEBUG */ | |
| 1251 plContext); | 1198 plContext); |
| 1252 if (error) { | 1199 if (error) { |
| 1253 #ifdef DEBUG_volkov | |
| 1254 char *temp = pkix_Error2ASCII(error, plContext); | |
| 1255 fprintf(stderr, "GET BUILD RES ERRORS:\n%s\n", temp); | |
| 1256 PKIX_PL_Free(temp, NULL); | |
| 1257 #endif /* DEBUG */ | |
| 1258 PKIX_PL_Object_DecRef((PKIX_PL_Object *)error, plContext); | 1200 PKIX_PL_Object_DecRef((PKIX_PL_Object *)error, plContext); |
| 1259 } | 1201 } |
| 1260 #ifdef DEBUG_volkov | |
| 1261 if (trustedRoot) { | |
| 1262 CERT_DestroyCertificate(trustedRoot); | |
| 1263 } | |
| 1264 if (validChain) { | |
| 1265 CERT_DestroyCertList(validChain); | |
| 1266 } | |
| 1267 #endif /* DEBUG */ | |
| 1268 if (procParams) { | 1202 if (procParams) { |
| 1269 PKIX_PL_Object_DecRef((PKIX_PL_Object *)procParams, plContext); | 1203 PKIX_PL_Object_DecRef((PKIX_PL_Object *)procParams, plContext); |
| 1270 } | 1204 } |
| 1271 if (plContext) { | 1205 if (plContext) { |
| 1272 PKIX_PL_NssContext_Destroy(plContext); | 1206 PKIX_PL_NssContext_Destroy(plContext); |
| 1273 } | 1207 } |
| 1274 | 1208 |
| 1275 #ifdef PKIX_OBJECT_LEAK_TEST | 1209 #ifdef PKIX_OBJECT_LEAK_TEST |
| 1276 leakedObjNum = | 1210 leakedObjNum = |
| 1277 pkix_pl_lifecycle_ObjectLeakCheck(leakedObjNum ? objCountTable : NULL); | 1211 pkix_pl_lifecycle_ObjectLeakCheck(leakedObjNum ? objCountTable : NULL); |
| (...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2316 | 2250 |
| 2317 } while (errorGenerated); | 2251 } while (errorGenerated); |
| 2318 | 2252 |
| 2319 runningLeakTest = PKIX_FALSE; | 2253 runningLeakTest = PKIX_FALSE; |
| 2320 PR_ATOMIC_DECREMENT(¶llelFnInvocationCount); | 2254 PR_ATOMIC_DECREMENT(¶llelFnInvocationCount); |
| 2321 usePKIXValidationEngine = savedUsePkixEngFlag; | 2255 usePKIXValidationEngine = savedUsePkixEngFlag; |
| 2322 #endif /* PKIX_OBJECT_LEAK_TEST */ | 2256 #endif /* PKIX_OBJECT_LEAK_TEST */ |
| 2323 | 2257 |
| 2324 return r; | 2258 return r; |
| 2325 } | 2259 } |
| OLD | NEW |