From 1db8f13af3ef228d3182c8f3cb3a0e2827541ad3 Mon Sep 17 00:00:00 2001 From: Franziskus Kiefer Date: Wed, 1 Nov 2017 15:38:36 +0100 Subject: [PATCH 01/33] Bug 1401594 - land NSS NSS_3_34_BETA1 UPGRADE_NSS_RELEASE, r=me MozReview-Commit-ID: 8ckNdJ29KWZ --HG-- extra : rebase_source : 9766af247842aabce5e46c4a8d1d03c3f70d21f7 --- security/nss.symbols | 3 + security/nss/TAG-INFO | 2 +- .../abi-check/expected-report-libnss3.so.txt | 11 + .../abi-check/expected-report-libssl3.so.txt | 15 + .../nss/automation/buildbot-slave/build.sh | 25 +- security/nss/cmd/certutil/certutil.c | 211 +- security/nss/cmd/lib/secutil.c | 7 +- security/nss/cmd/listsuites/listsuites.c | 48 + security/nss/cmd/manifest.mn | 1 + security/nss/cmd/rsapoptst/rsapoptst.c | 185 +- security/nss/cmd/rsapoptst/rsapoptst.gyp | 25 + security/nss/coreconf/coreconf.dep | 1 + security/nss/cpputil/cpputil.gyp | 1 + security/nss/cpputil/databuffer.cc | 116 + security/nss/cpputil/databuffer.h | 101 +- security/nss/cpputil/manifest.mn | 1 + security/nss/doc/certutil.xml | 10 + security/nss/doc/html/certutil.html | 43 +- security/nss/doc/html/pk12util.html | 12 +- security/nss/doc/nroff/certutil.1 | 37 +- security/nss/doc/nroff/pk12util.1 | 279 +- security/nss/doc/pk12util.xml | 74 +- security/nss/fuzz/tls_mutators.cc | 1 + security/nss/gtests/cryptohi_gtest/Makefile | 43 + .../gtests/cryptohi_gtest/cryptohi_gtest.gyp | 29 + .../cryptohi_gtest/cryptohi_unittest.cc | 373 ++ .../nss/gtests/cryptohi_gtest/manifest.mn | 22 + security/nss/gtests/manifest.mn | 1 + security/nss/gtests/pk11_gtest/manifest.mn | 8 +- security/nss/gtests/pk11_gtest/pk11_gtest.gyp | 1 + .../nss/gtests/ssl_gtest/ssl_auth_unittest.cc | 20 +- security/nss/gtests/ssl_gtest/ssl_gtest.cc | 2 + .../gtests/ssl_gtest/ssl_keylog_unittest.cc | 3 +- security/nss/gtests/ssl_gtest/tls_agent.cc | 1 - security/nss/gtests/ssl_gtest/tls_agent.h | 1 - security/nss/lib/certdb/certdb.c | 1 + security/nss/lib/ckfw/builtins/certdata.txt | 3503 ++++++----------- security/nss/lib/ckfw/builtins/nssckbi.h | 4 +- security/nss/lib/cryptohi/cryptohi.h | 61 + security/nss/lib/cryptohi/keyi.h | 3 + security/nss/lib/cryptohi/seckey.c | 90 + security/nss/lib/cryptohi/secsign.c | 361 +- security/nss/lib/cryptohi/secvfy.c | 149 +- security/nss/lib/freebl/rsa.c | 7 + security/nss/lib/nss/nss.def | 10 + security/nss/lib/pk11wrap/pk11merge.c | 1 + security/nss/lib/pk11wrap/pk11obj.c | 38 +- security/nss/lib/pk11wrap/pk11pub.h | 4 + security/nss/lib/pk11wrap/secmodti.h | 1 + security/nss/lib/pkcs7/p7create.c | 2 +- security/nss/nss.gyp | 2 + security/nss/tests/all.sh | 21 +- security/nss/tests/cert/cert.sh | 368 +- security/nss/tests/cipher/cipher.sh | 16 + security/nss/tests/common/init.sh | 2 + security/nss/tests/pkits/pkits.sh | 2 +- security/nss/tests/ssl/ssl.sh | 104 +- security/nss/tests/ssl_gtests/ssl_gtests.sh | 7 + 58 files changed, 3673 insertions(+), 2797 deletions(-) create mode 100644 security/nss/cmd/rsapoptst/rsapoptst.gyp create mode 100644 security/nss/cpputil/databuffer.cc create mode 100644 security/nss/gtests/cryptohi_gtest/Makefile create mode 100644 security/nss/gtests/cryptohi_gtest/cryptohi_gtest.gyp create mode 100644 security/nss/gtests/cryptohi_gtest/cryptohi_unittest.cc create mode 100644 security/nss/gtests/cryptohi_gtest/manifest.mn diff --git a/security/nss.symbols b/security/nss.symbols index 2920d3740205..77cb00be0833 100644 --- a/security/nss.symbols +++ b/security/nss.symbols @@ -718,6 +718,9 @@ __PK11_SetCertificateNickname NSS_SecureMemcmpZero PORT_ZAllocAlignedOffset_Util CERT_FindCertByNicknameOrEmailAddrCX +SECKEY_GetPrivateKeyType +SEC_DerSignDataWithAlgorithmID +SEC_CreateSignatureAlgorithmParameters # These symbols are not used by Firefox itself, but are used by Java's security # libraries, which in turn are used by Java applets/plugins/etc. Provide them # to make Java code happy. diff --git a/security/nss/TAG-INFO b/security/nss/TAG-INFO index 2af2cb1227de..69e9a1576ba2 100644 --- a/security/nss/TAG-INFO +++ b/security/nss/TAG-INFO @@ -1 +1 @@ -f3766809817b +NSS_3_34_BETA1 diff --git a/security/nss/automation/abi-check/expected-report-libnss3.so.txt b/security/nss/automation/abi-check/expected-report-libnss3.so.txt index e69de29bb2d1..e99ff3aaf1bc 100644 --- a/security/nss/automation/abi-check/expected-report-libnss3.so.txt +++ b/security/nss/automation/abi-check/expected-report-libnss3.so.txt @@ -0,0 +1,11 @@ +Functions changes summary: 0 Removed, 0 Changed, 4 Added functions +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +4 Added functions: + + 'function SECItem* SEC_CreateSignatureAlgorithmParameters(SECItem*, SECOidTag, SECOidTag, const SECItem*, const SECKEYPrivateKey*)' {SEC_CreateSignatureAlgorithmParameters@@NSS_3.34} + 'function SECStatus SEC_DerSignDataWithAlgorithmID(SECItem*, const unsigned char*, int, SECKEYPrivateKey*, SECAlgorithmID*)' {SEC_DerSignDataWithAlgorithmID@@NSS_3.34} + 'function SECStatus SEC_SignDataWithAlgorithmID(SECItem*, const unsigned char*, int, SECKEYPrivateKey*, SECAlgorithmID*)' {SEC_SignDataWithAlgorithmID@@NSS_3.34} + 'function void SGN_NewContextWithAlgorithmID(SECAlgorithmID*, SECKEYPrivateKey*)' {SGN_NewContextWithAlgorithmID@@NSS_3.34} + + diff --git a/security/nss/automation/abi-check/expected-report-libssl3.so.txt b/security/nss/automation/abi-check/expected-report-libssl3.so.txt index e69de29bb2d1..16d3ab7cf47f 100644 --- a/security/nss/automation/abi-check/expected-report-libssl3.so.txt +++ b/security/nss/automation/abi-check/expected-report-libssl3.so.txt @@ -0,0 +1,15 @@ +Functions changes summary: 0 Removed, 1 Changed, 0 Added function +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable + +1 function with some indirect sub-type change: + + [C]'function SECStatus SSL_GetChannelInfo(SSLChannelInfo*, PRUintn)' at sslinfo.c:26:1 has some indirect sub-type changes: + parameter 1 of type 'SSLChannelInfo*' has sub-type changes: + in pointed to type 'typedef SSLChannelInfo' at sslt.h:288:1: + underlying type 'struct SSLChannelInfoStr' at sslt.h:229:1 changed: + type size changed from 896 to 960 bits + 2 data member insertions: + 'SSLNamedGroup SSLChannelInfoStr::originalKeaGroup', at offset 864 (in bits) at sslt.h:281:1 + 'PRBool SSLChannelInfoStr::resumed', at offset 896 (in bits) at sslt.h:284:1 + + diff --git a/security/nss/automation/buildbot-slave/build.sh b/security/nss/automation/buildbot-slave/build.sh index e30f78d1d90d..7675136ddfb5 100755 --- a/security/nss/automation/buildbot-slave/build.sh +++ b/security/nss/automation/buildbot-slave/build.sh @@ -256,26 +256,41 @@ check_abi() fi popd + ABI_PROBLEM_FOUND=0 ABI_REPORT=${OUTPUTDIR}/abi-diff.txt rm -f ${ABI_REPORT} PREVDIST=${HGDIR}/baseline/dist NEWDIST=${HGDIR}/dist ALL_SOs="libfreebl3.so libfreeblpriv3.so libnspr4.so libnss3.so libnssckbi.so libnssdbm3.so libnsssysinit.so libnssutil3.so libplc4.so libplds4.so libsmime3.so libsoftokn3.so libssl3.so" for SO in ${ALL_SOs}; do - if [ ! -f nss/automation/abi-check/expected-report-$SO.txt ]; then - touch nss/automation/abi-check/expected-report-$SO.txt + if [ ! -f ${HGDIR}/nss/automation/abi-check/expected-report-$SO.txt ]; then + touch ${HGDIR}/nss/automation/abi-check/expected-report-$SO.txt fi abidiff --hd1 $PREVDIST/public/ --hd2 $NEWDIST/public \ $PREVDIST/*/lib/$SO $NEWDIST/*/lib/$SO \ - > nss/automation/abi-check/new-report-$SO.txt - diff -u nss/automation/abi-check/expected-report-$SO.txt \ - nss/automation/abi-check/new-report-$SO.txt >> ${ABI_REPORT} + > ${HGDIR}/nss/automation/abi-check/new-report-$SO.txt + if [ $? -ne 0 ]; then + ABI_PROBLEM_FOUND=1 + fi + if [ ! -f ${HGDIR}/nss/automation/abi-check/expected-report-$SO.txt ]; then + ABI_PROBLEM_FOUND=1 + fi + + diff -wB -u ${HGDIR}/nss/automation/abi-check/expected-report-$SO.txt \ + ${HGDIR}/nss/automation/abi-check/new-report-$SO.txt >> ${ABI_REPORT} + if [ ! -f ${ABI_REPORT} ]; then + ABI_PROBLEM_FOUND=1 + fi done if [ -s ${ABI_REPORT} ]; then print_log "FAILED: there are new unexpected ABI changes" cat ${ABI_REPORT} return 1 + elif [ $ABI_PROBLEM_FOUND -ne 0 ]; then + print_log "FAILED: failure executing the ABI checks" + cat ${ABI_REPORT} + return 1 fi return 0 diff --git a/security/nss/cmd/certutil/certutil.c b/security/nss/cmd/certutil/certutil.c index 9bbb940b8f2b..5f637e11c1e3 100644 --- a/security/nss/cmd/certutil/certutil.c +++ b/security/nss/cmd/certutil/certutil.c @@ -194,6 +194,8 @@ CertReq(SECKEYPrivateKey *privk, SECKEYPublicKey *pubk, KeyType keyType, PLArenaPool *arena; void *extHandle; SECItem signedReq = { siBuffer, NULL, 0 }; + SECAlgorithmID signAlg; + SECItem *params = NULL; arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); if (!arena) { @@ -211,11 +213,25 @@ CertReq(SECKEYPrivateKey *privk, SECKEYPublicKey *pubk, KeyType keyType, /* Change cert type to RSA-PSS, if desired. */ if (pssCertificate) { + params = SEC_CreateSignatureAlgorithmParameters(arena, + NULL, + SEC_OID_PKCS1_RSA_PSS_SIGNATURE, + hashAlgTag, + NULL, + privk); + if (!params) { + PORT_FreeArena(arena, PR_FALSE); + SECKEY_DestroySubjectPublicKeyInfo(spki); + SECU_PrintError(progName, "unable to create RSA-PSS parameters"); + return SECFailure; + } + spki->algorithm.parameters.data = NULL; rv = SECOID_SetAlgorithmID(arena, &spki->algorithm, - SEC_OID_PKCS1_RSA_PSS_SIGNATURE, 0); + SEC_OID_PKCS1_RSA_PSS_SIGNATURE, params); if (rv != SECSuccess) { PORT_FreeArena(arena, PR_FALSE); + SECKEY_DestroySubjectPublicKeyInfo(spki); SECU_PrintError(progName, "unable to set algorithm ID"); return SECFailure; } @@ -256,16 +272,34 @@ CertReq(SECKEYPrivateKey *privk, SECKEYPublicKey *pubk, KeyType keyType, return SECFailure; } - /* Sign the request */ - signAlgTag = SEC_GetSignatureAlgorithmOidTag(keyType, hashAlgTag); - if (signAlgTag == SEC_OID_UNKNOWN) { - PORT_FreeArena(arena, PR_FALSE); - SECU_PrintError(progName, "unknown Key or Hash type"); - return SECFailure; + PORT_Memset(&signAlg, 0, sizeof(signAlg)); + if (pssCertificate) { + rv = SECOID_SetAlgorithmID(arena, &signAlg, + SEC_OID_PKCS1_RSA_PSS_SIGNATURE, params); + if (rv != SECSuccess) { + PORT_FreeArena(arena, PR_FALSE); + SECU_PrintError(progName, "unable to set algorithm ID"); + return SECFailure; + } + } else { + signAlgTag = SEC_GetSignatureAlgorithmOidTag(keyType, hashAlgTag); + if (signAlgTag == SEC_OID_UNKNOWN) { + PORT_FreeArena(arena, PR_FALSE); + SECU_PrintError(progName, "unknown Key or Hash type"); + return SECFailure; + } + rv = SECOID_SetAlgorithmID(arena, &signAlg, signAlgTag, 0); + if (rv != SECSuccess) { + PORT_FreeArena(arena, PR_FALSE); + SECU_PrintError(progName, "unable to set algorithm ID"); + return SECFailure; + } } - rv = SEC_DerSignData(arena, &signedReq, encoding->data, encoding->len, - privk, signAlgTag); + /* Sign the request */ + rv = SEC_DerSignDataWithAlgorithmID(arena, &signedReq, + encoding->data, encoding->len, + privk, &signAlg); if (rv) { PORT_FreeArena(arena, PR_FALSE); SECU_PrintError(progName, "signing of data failed"); @@ -1183,6 +1217,8 @@ luC(enum usage_level ul, const char *command) " -o output-cert"); FPS "%-20s Self sign\n", " -x"); + FPS "%-20s Sign the certificate with RSA-PSS (the issuer key must be rsa)\n", + " --pss-sign"); FPS "%-20s Cert serial number\n", " -m serial-number"); FPS "%-20s Time Warp\n", @@ -1516,6 +1552,8 @@ luR(enum usage_level ul, const char *command) " -h token-name"); FPS "%-20s Key size in bits, RSA keys only (min %d, max %d, default %d)\n", " -g key-size", MIN_KEY_BITS, MAX_KEY_BITS, DEFAULT_KEY_BITS); + FPS "%-20s Create a certificate request restricted to RSA-PSS (rsa only)\n", + " --pss"); FPS "%-20s Name of file containing PQG parameters (dsa only)\n", " -q pqgfile"); FPS "%-20s Elliptic curve name (ec only)\n", @@ -1693,6 +1731,8 @@ luS(enum usage_level ul, const char *command) " -h token-name"); FPS "%-20s Key size in bits, RSA keys only (min %d, max %d, default %d)\n", " -g key-size", MIN_KEY_BITS, MAX_KEY_BITS, DEFAULT_KEY_BITS); + FPS "%-20s Create a certificate restricted to RSA-PSS (rsa only)\n", + " --pss"); FPS "%-20s Name of file containing PQG parameters (dsa only)\n", " -q pqgfile"); FPS "%-20s Elliptic curve name (ec only)\n", @@ -1701,6 +1741,8 @@ luS(enum usage_level ul, const char *command) ""); FPS "%-20s Self sign\n", " -x"); + FPS "%-20s Sign the certificate with RSA-PSS (the issuer key must be rsa)\n", + " --pss-sign"); FPS "%-20s Cert serial number\n", " -m serial-number"); FPS "%-20s Time Warp\n", @@ -1864,47 +1906,120 @@ MakeV1Cert(CERTCertDBHandle *handle, return (cert); } +static SECStatus +SetSignatureAlgorithm(PLArenaPool *arena, + SECAlgorithmID *signAlg, + SECAlgorithmID *spkiAlg, + SECOidTag hashAlgTag, + SECKEYPrivateKey *privKey, + PRBool pssSign) +{ + SECStatus rv; + + if (pssSign || + SECOID_GetAlgorithmTag(spkiAlg) == SEC_OID_PKCS1_RSA_PSS_SIGNATURE) { + SECItem *srcParams; + SECItem *params; + + if (SECOID_GetAlgorithmTag(spkiAlg) == SEC_OID_PKCS1_RSA_PSS_SIGNATURE) { + srcParams = &spkiAlg->parameters; + } else { + /* If the issuer's public key is RSA, the parameter field + * of the SPKI should be NULL, which can't be used as a + * basis of RSA-PSS parameters. */ + srcParams = NULL; + } + params = SEC_CreateSignatureAlgorithmParameters(arena, + NULL, + SEC_OID_PKCS1_RSA_PSS_SIGNATURE, + hashAlgTag, + srcParams, + privKey); + if (!params) { + SECU_PrintError(progName, "Could not create RSA-PSS parameters"); + return SECFailure; + } + rv = SECOID_SetAlgorithmID(arena, signAlg, + SEC_OID_PKCS1_RSA_PSS_SIGNATURE, + params); + if (rv != SECSuccess) { + SECU_PrintError(progName, "Could not set signature algorithm id."); + return rv; + } + } else { + KeyType keyType = SECKEY_GetPrivateKeyType(privKey); + SECOidTag algID; + + algID = SEC_GetSignatureAlgorithmOidTag(keyType, hashAlgTag); + if (algID == SEC_OID_UNKNOWN) { + SECU_PrintError(progName, "Unknown key or hash type for issuer."); + return SECFailure; + } + rv = SECOID_SetAlgorithmID(arena, signAlg, algID, 0); + if (rv != SECSuccess) { + SECU_PrintError(progName, "Could not set signature algorithm id."); + return rv; + } + } + return SECSuccess; +} + static SECStatus SignCert(CERTCertDBHandle *handle, CERTCertificate *cert, PRBool selfsign, SECOidTag hashAlgTag, SECKEYPrivateKey *privKey, char *issuerNickName, - int certVersion, void *pwarg) + int certVersion, PRBool pssSign, void *pwarg) { SECItem der; SECKEYPrivateKey *caPrivateKey = NULL; SECStatus rv; PLArenaPool *arena; - SECOidTag algID; + CERTCertificate *issuer; void *dummy; - if (!selfsign) { - CERTCertificate *issuer = PK11_FindCertFromNickname(issuerNickName, pwarg); - if ((CERTCertificate *)NULL == issuer) { - SECU_PrintError(progName, "unable to find issuer with nickname %s", - issuerNickName); - return SECFailure; - } - - privKey = caPrivateKey = PK11_FindKeyByAnyCert(issuer, pwarg); - CERT_DestroyCertificate(issuer); - if (caPrivateKey == NULL) { - SECU_PrintError(progName, "unable to retrieve key %s", issuerNickName); - return SECFailure; - } - } - arena = cert->arena; - algID = SEC_GetSignatureAlgorithmOidTag(privKey->keyType, hashAlgTag); - if (algID == SEC_OID_UNKNOWN) { - fprintf(stderr, "Unknown key or hash type for issuer."); + if (selfsign) { + issuer = cert; + } else { + issuer = PK11_FindCertFromNickname(issuerNickName, pwarg); + if ((CERTCertificate *)NULL == issuer) { + SECU_PrintError(progName, "unable to find issuer with nickname %s", + issuerNickName); + rv = SECFailure; + goto done; + } + privKey = caPrivateKey = PK11_FindKeyByAnyCert(issuer, pwarg); + if (caPrivateKey == NULL) { + SECU_PrintError(progName, "unable to retrieve key %s", issuerNickName); + rv = SECFailure; + CERT_DestroyCertificate(issuer); + goto done; + } + } + + if (pssSign && + (SECKEY_GetPrivateKeyType(privKey) != rsaKey && + SECKEY_GetPrivateKeyType(privKey) != rsaPssKey)) { + SECU_PrintError(progName, "unable to create RSA-PSS signature with key %s", + issuerNickName); rv = SECFailure; + if (!selfsign) { + CERT_DestroyCertificate(issuer); + } goto done; } - rv = SECOID_SetAlgorithmID(arena, &cert->signature, algID, 0); + rv = SetSignatureAlgorithm(arena, + &cert->signature, + &issuer->subjectPublicKeyInfo.algorithm, + hashAlgTag, + privKey, + pssSign); + if (!selfsign) { + CERT_DestroyCertificate(issuer); + } if (rv != SECSuccess) { - fprintf(stderr, "Could not set signature algorithm id."); goto done; } @@ -1923,7 +2038,8 @@ SignCert(CERTCertDBHandle *handle, CERTCertificate *cert, PRBool selfsign, break; default: PORT_SetError(SEC_ERROR_INVALID_ARGS); - return SECFailure; + rv = SECFailure; + goto done; } der.len = 0; @@ -1936,7 +2052,8 @@ SignCert(CERTCertDBHandle *handle, CERTCertificate *cert, PRBool selfsign, goto done; } - rv = SEC_DerSignData(arena, &cert->derCert, der.data, der.len, privKey, algID); + rv = SEC_DerSignDataWithAlgorithmID(arena, &cert->derCert, der.data, der.len, + privKey, &cert->signature); if (rv != SECSuccess) { fprintf(stderr, "Could not sign encoded certificate data.\n"); /* result allocated out of the arena, it will be freed @@ -1969,6 +2086,7 @@ CreateCert( certutilExtnList extnList, const char *extGeneric, int certVersion, + PRBool pssSign, SECItem *certDER) { void *extHandle = NULL; @@ -2029,7 +2147,7 @@ CreateCert( rv = SignCert(handle, subjectCert, selfsign, hashAlgTag, *selfsignprivkey, issuerNickName, - certVersion, pwarg); + certVersion, pssSign, pwarg); if (rv != SECSuccess) break; @@ -2352,6 +2470,7 @@ enum certutilOpts { opt_GenericExtensions, opt_NewNickname, opt_Pss, + opt_PssSign, opt_Help }; @@ -2472,6 +2591,8 @@ static const secuCommandFlag options_init[] = "new-n" }, { /* opt_Pss */ 0, PR_FALSE, 0, PR_FALSE, "pss" }, + { /* opt_PssSign */ 0, PR_FALSE, 0, PR_FALSE, + "pss-sign" }, }; #define NUM_OPTIONS ((sizeof options_init) / (sizeof options_init[0])) @@ -3363,6 +3484,25 @@ certutil_main(int argc, char **argv, PRBool initialize) } } + /* --pss-sign is to sign a certificate with RSA-PSS, even if the + * issuer's key is an RSA key. If the key is an RSA-PSS key, the + * generated signature is always RSA-PSS. */ + if (certutil.options[opt_PssSign].activated) { + if (!certutil.commands[cmd_CreateNewCert].activated && + !certutil.commands[cmd_CreateAndAddCert].activated) { + PR_fprintf(PR_STDERR, + "%s -%c: --pss-sign only works with -C or -S.\n", + progName, commandToRun); + return 255; + } + if (keytype != rsaKey) { + PR_fprintf(PR_STDERR, + "%s -%c: --pss-sign only works with RSA keys.\n", + progName, commandToRun); + return 255; + } + } + /* If we need a list of extensions convert the flags into list format */ if (certutil.commands[cmd_CertReq].activated || certutil.commands[cmd_CreateAndAddCert].activated || @@ -3500,6 +3640,7 @@ certutil_main(int argc, char **argv, PRBool initialize) (certutil.options[opt_GenericExtensions].activated ? certutil.options[opt_GenericExtensions].arg : NULL), certVersion, + certutil.options[opt_PssSign].activated, &certDER); if (rv) goto shutdown; diff --git a/security/nss/cmd/lib/secutil.c b/security/nss/cmd/lib/secutil.c index cf52269c3b2d..cedecee2ddf3 100644 --- a/security/nss/cmd/lib/secutil.c +++ b/security/nss/cmd/lib/secutil.c @@ -1312,15 +1312,12 @@ SECU_PrintAlgorithmID(FILE *out, SECAlgorithmID *a, char *m, int level) return; } - if (algtag == SEC_OID_PKCS1_RSA_PSS_SIGNATURE) { - secu_PrintRSAPSSParams(out, &a->parameters, "Parameters", level + 1); - return; - } - if (a->parameters.len == 0 || (a->parameters.len == 2 && PORT_Memcmp(a->parameters.data, "\005\000", 2) == 0)) { /* No arguments or NULL argument */ + } else if (algtag == SEC_OID_PKCS1_RSA_PSS_SIGNATURE) { + secu_PrintRSAPSSParams(out, &a->parameters, "Parameters", level + 1); } else { /* Print args to algorithm */ SECU_PrintAsHex(out, &a->parameters, "Args", level + 1); diff --git a/security/nss/cmd/listsuites/listsuites.c b/security/nss/cmd/listsuites/listsuites.c index 458130e5ec43..8eb2c3553edf 100644 --- a/security/nss/cmd/listsuites/listsuites.c +++ b/security/nss/cmd/listsuites/listsuites.c @@ -10,7 +10,9 @@ #include #include +#include "nss.h" #include "secport.h" +#include "secutil.h" #include "ssl.h" int @@ -19,6 +21,43 @@ main(int argc, char **argv) const PRUint16 *cipherSuites = SSL_ImplementedCiphers; int i; int errCount = 0; + SECStatus rv; + PRErrorCode err; + char *certDir = NULL; + + /* load policy from $SSL_DIR/pkcs11.txt, for testing */ + certDir = SECU_DefaultSSLDir(); + if (certDir) { + rv = NSS_Init(certDir); + } else { + rv = NSS_NoDB_Init(NULL); + } + if (rv != SECSuccess) { + err = PR_GetError(); + ++errCount; + fprintf(stderr, "NSS_Init failed: %s\n", PORT_ErrorToString(err)); + goto out; + } + + /* apply policy */ + rv = NSS_SetAlgorithmPolicy(SEC_OID_APPLY_SSL_POLICY, NSS_USE_POLICY_IN_SSL, 0); + if (rv != SECSuccess) { + err = PR_GetError(); + ++errCount; + fprintf(stderr, "NSS_SetAlgorithmPolicy failed: %s\n", + PORT_ErrorToString(err)); + goto out; + } + + /* update the default cipher suites according to the policy */ + rv = SSL_OptionSetDefault(SSL_SECURITY, PR_TRUE); + if (rv != SECSuccess) { + err = PR_GetError(); + ++errCount; + fprintf(stderr, "SSL_OptionSetDefault failed: %s\n", + PORT_ErrorToString(err)); + goto out; + } fputs("This version of libSSL supports these cipher suites:\n\n", stdout); @@ -58,5 +97,14 @@ main(int argc, char **argv) info.isFIPS ? "FIPS" : "", info.nonStandard ? "nonStandard" : ""); } + +out: + rv = NSS_Shutdown(); + if (rv != SECSuccess) { + err = PR_GetError(); + ++errCount; + fprintf(stderr, "NSS_Shutdown failed: %s\n", PORT_ErrorToString(err)); + } + return errCount; } diff --git a/security/nss/cmd/manifest.mn b/security/nss/cmd/manifest.mn index 153384ce14c9..f5e6bc236694 100644 --- a/security/nss/cmd/manifest.mn +++ b/security/nss/cmd/manifest.mn @@ -63,6 +63,7 @@ NSS_SRCDIRS = \ pp \ pwdecrypt \ rsaperf \ + rsapoptst \ sdrtest \ selfserv \ signtool \ diff --git a/security/nss/cmd/rsapoptst/rsapoptst.c b/security/nss/cmd/rsapoptst/rsapoptst.c index 81ddcd6c4312..800c7547330b 100644 --- a/security/nss/cmd/rsapoptst/rsapoptst.c +++ b/security/nss/cmd/rsapoptst/rsapoptst.c @@ -23,7 +23,7 @@ static const struct test_args test_array[] = { { "d_n_q", 0x02, "private exponent, modulus, prime2" }, { "d_p_q", 0x04, "private exponent, prime1, prime2" }, { "e_d_q", 0x08, "public exponent, private exponent, prime2" }, - { "e_d_n", 0x10, "public exponent, private exponent, moduls" } + { "e_d_n", 0x10, "public exponent, private exponent, modulus" } }; static const int test_array_size = (sizeof(test_array) / sizeof(struct test_args)); @@ -58,6 +58,7 @@ const static CK_ATTRIBUTE rsaTemplate[] = { { CKA_TOKEN, NULL, 0 }, { CKA_SENSITIVE, NULL, 0 }, { CKA_PRIVATE, NULL, 0 }, + { CKA_ID, NULL, 0 }, { CKA_MODULUS, NULL, 0 }, { CKA_PUBLIC_EXPONENT, NULL, 0 }, { CKA_PRIVATE_EXPONENT, NULL, 0 }, @@ -123,48 +124,79 @@ fail: #define ATTR_STRING(x) getNameFromAttribute(x) -void -dumpTemplate(CK_ATTRIBUTE *template, int start, int end) +static void +dumphex(FILE *file, const unsigned char *cpval, int start, int end) { - int i, j; - for (i = 0; i < end; i++) { + int i; + for (i = start; i < end; i++) { + if ((i % 16) == 0) + fprintf(file, "\n "); + fprintf(file, " %02x", cpval[i]); + } + return; +} + +void +dumpTemplate(FILE *file, const CK_ATTRIBUTE *template, int start, int end) +{ + int i; + for (i = start; i < end; i++) { unsigned char cval; CK_ULONG ulval; - unsigned char *cpval; + const unsigned char *cpval; - fprintf(stderr, "%s:", ATTR_STRING(template[i].type)); + fprintf(file, "%s:", ATTR_STRING(template[i].type)); switch (template[i].ulValueLen) { case 1: cval = *(unsigned char *)template[i].pValue; switch (cval) { case 0: - fprintf(stderr, " false"); + fprintf(file, " false"); break; case 1: - fprintf(stderr, " true"); + fprintf(file, " true"); break; default: - fprintf(stderr, " %d (=0x%02x,'%c')", cval, cval, cval); + fprintf(file, " %d (=0x%02x,'%c')", cval, cval, cval); break; } break; case sizeof(CK_ULONG): ulval = *(CK_ULONG *)template[i].pValue; - fprintf(stderr, " %ld (=0x%04lx)", ulval, ulval); + fprintf(file, " %ld (=0x%04lx)", ulval, ulval); break; default: - cpval = (unsigned char *)template[i].pValue; - for (j = 0; j < template[i].ulValueLen; j++) { - if ((j % 16) == 0) - fprintf(stderr, "\n "); - fprintf(stderr, " %02x", cpval[j]); - } + cpval = (const unsigned char *)template[i].pValue; + dumphex(file, cpval, 0, template[i].ulValueLen); break; } - fprintf(stderr, "\n"); + fprintf(file, "\n"); } } +void +dumpItem(FILE *file, const SECItem *item) +{ + const unsigned char *cpval; + + if (item == NULL) { + fprintf(file, " pNULL "); + return; + } + if (item->data == NULL) { + fprintf(file, " NULL "); + return; + } + if (item->len == 0) { + fprintf(file, " Empty "); + return; + } + cpval = item->data; + dumphex(file, cpval, 0, item->len); + fprintf(file, " "); + return; +} + PRBool rsaKeysAreEqual(PK11ObjectType srcType, void *src, PK11ObjectType destType, void *dest) @@ -191,6 +223,9 @@ rsaKeysAreEqual(PK11ObjectType srcType, void *src, } for (i = 0; i < RSA_ATTRIBUTES; i++) { + if (srcTemplate[i].type == CKA_ID) { + continue; /* we purposefully make the CKA_ID different */ + } if (srcTemplate[i].ulValueLen != destTemplate[i].ulValueLen) { printf("key->%s not equal src_len = %ld, dest_len=%ld\n", ATTR_STRING(srcTemplate[i].type), @@ -204,18 +239,22 @@ rsaKeysAreEqual(PK11ObjectType srcType, void *src, } if (!areEqual) { fprintf(stderr, "original key:\n"); - dumpTemplate(srcTemplate, 0, RSA_ATTRIBUTES); + dumpTemplate(stderr, srcTemplate, 0, RSA_ATTRIBUTES); fprintf(stderr, "created key:\n"); - dumpTemplate(destTemplate, 0, RSA_ATTRIBUTES); + dumpTemplate(stderr, destTemplate, 0, RSA_ATTRIBUTES); } + resetTemplate(srcTemplate, 0, RSA_ATTRIBUTES); + resetTemplate(destTemplate, 0, RSA_ATTRIBUTES); return areEqual; } static int exp_exp_prime_fail_count = 0; +#define LEAK_ID 0xf + static int doRSAPopulateTest(unsigned int keySize, unsigned long exponent, - int mask, void *pwarg) + int mask, int round, void *pwarg) { SECKEYPrivateKey *rsaPrivKey; SECKEYPublicKey *rsaPubKey; @@ -227,7 +266,10 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, CK_OBJECT_CLASS obj_class = CKO_PRIVATE_KEY; CK_KEY_TYPE key_type = CKK_RSA; CK_BBOOL ck_false = CK_FALSE; + CK_BYTE cka_id[2] = { 0, 0 }; int failed = 0; + int leak_found; /* did we find the expected leak */ + int expect_leak = 0; /* are we expecting a leak? */ rsaParams.pe = exponent; rsaParams.keySizeInBits = keySize; @@ -259,11 +301,15 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, tstTemplate[3].ulValueLen = sizeof(ck_false); tstTemplate[4].pValue = &ck_false; tstTemplate[4].ulValueLen = sizeof(ck_false); - tstHeaderCount = 5; + tstTemplate[5].pValue = &cka_id[0]; + tstTemplate[5].ulValueLen = sizeof(cka_id); + tstHeaderCount = 6; + cka_id[0] = round; if (mask & 1) { printf("%s\n", test_array[1].description); resetTemplate(tstTemplate, tstHeaderCount, RSA_ATTRIBUTES); + cka_id[1] = 0; copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, tstHeaderCount, CKA_PUBLIC_EXPONENT); copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, @@ -271,10 +317,10 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, tstHeaderCount + 2, CKA_PRIME_1); - tstPrivKey = PK11_CreateGenericObject(slot, tstTemplate, - tstHeaderCount + - 3, - PR_FALSE); + tstPrivKey = PK11_CreateManagedGenericObject(slot, tstTemplate, + tstHeaderCount + + 3, + PR_FALSE); if (tstPrivKey == NULL) { fprintf(stderr, "RSA Populate failed: pubExp mod p\n"); failed = 1; @@ -290,6 +336,7 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, printf("%s\n", test_array[2].description); /* test the basic2 case, public exponent, modulus, prime2 */ resetTemplate(tstTemplate, tstHeaderCount, RSA_ATTRIBUTES); + cka_id[1] = 1; copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, tstHeaderCount, CKA_PUBLIC_EXPONENT); copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, @@ -299,10 +346,10 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, /* test with q in the prime1 position */ tstTemplate[tstHeaderCount + 2].type = CKA_PRIME_1; - tstPrivKey = PK11_CreateGenericObject(slot, tstTemplate, - tstHeaderCount + - 3, - PR_FALSE); + tstPrivKey = PK11_CreateManagedGenericObject(slot, tstTemplate, + tstHeaderCount + + 3, + PR_FALSE); if (tstPrivKey == NULL) { fprintf(stderr, "RSA Populate failed: pubExp mod q\n"); failed = 1; @@ -318,6 +365,7 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, printf("%s\n", test_array[3].description); /* test the medium case, private exponent, prime1, prime2 */ resetTemplate(tstTemplate, tstHeaderCount, RSA_ATTRIBUTES); + cka_id[1] = 2; copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, tstHeaderCount, CKA_PRIVATE_EXPONENT); @@ -329,10 +377,10 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, tstTemplate[tstHeaderCount + 2].type = CKA_PRIME_1; tstTemplate[tstHeaderCount + 1].type = CKA_PRIME_2; - tstPrivKey = PK11_CreateGenericObject(slot, tstTemplate, - tstHeaderCount + - 3, - PR_FALSE); + tstPrivKey = PK11_CreateManagedGenericObject(slot, tstTemplate, + tstHeaderCount + + 3, + PR_FALSE); if (tstPrivKey == NULL) { fprintf(stderr, "RSA Populate failed: privExp p q\n"); failed = 1; @@ -348,6 +396,7 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, printf("%s\n", test_array[4].description); /* test the advanced case, public exponent, private exponent, prime2 */ resetTemplate(tstTemplate, tstHeaderCount, RSA_ATTRIBUTES); + cka_id[1] = 3; copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, tstHeaderCount, CKA_PRIVATE_EXPONENT); copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, @@ -355,10 +404,10 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, tstHeaderCount + 2, CKA_PRIME_2); - tstPrivKey = PK11_CreateGenericObject(slot, tstTemplate, - tstHeaderCount + - 3, - PR_FALSE); + tstPrivKey = PK11_CreateManagedGenericObject(slot, tstTemplate, + tstHeaderCount + + 3, + PR_FALSE); if (tstPrivKey == NULL) { fprintf(stderr, "RSA Populate failed: pubExp privExp q\n"); fprintf(stderr, " this is expected periodically. It means we\n"); @@ -373,11 +422,12 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, if (tstPrivKey) PK11_DestroyGenericObject(tstPrivKey); } - if (mask & 16) { + if (mask & 0x10) { printf("%s\n", test_array[5].description); /* test the advanced case2, public exponent, private exponent, modulus */ resetTemplate(tstTemplate, tstHeaderCount, RSA_ATTRIBUTES); + cka_id[1] = LEAK_ID; copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, tstHeaderCount, CKA_PRIVATE_EXPONENT); @@ -386,6 +436,7 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, copyAttribute(PK11_TypePrivKey, rsaPrivKey, tstTemplate, tstHeaderCount + 2, CKA_MODULUS); + /* purposefully use the old version. This will create a leak */ tstPrivKey = PK11_CreateGenericObject(slot, tstTemplate, tstHeaderCount + 3, @@ -398,9 +449,59 @@ doRSAPopulateTest(unsigned int keySize, unsigned long exponent, fprintf(stderr, "RSA Populate key mismatch: pubExp privExp mod\n"); failed = 1; } + expect_leak = 1; if (tstPrivKey) PK11_DestroyGenericObject(tstPrivKey); } + resetTemplate(tstTemplate, tstHeaderCount, RSA_ATTRIBUTES); + SECKEY_DestroyPrivateKey(rsaPrivKey); + SECKEY_DestroyPublicKey(rsaPubKey); + + /* make sure we didn't leak */ + leak_found = 0; + tstPrivKey = PK11_FindGenericObjects(slot, CKO_PRIVATE_KEY); + if (tstPrivKey) { + SECStatus rv; + PK11GenericObject *thisKey; + int i; + + fprintf(stderr, "Leaking keys...\n"); + for (i = 0, thisKey = tstPrivKey; thisKey; i++, + thisKey = PK11_GetNextGenericObject(thisKey)) { + SECItem id = { 0, NULL, 0 }; + + rv = PK11_ReadRawAttribute(PK11_TypeGeneric, thisKey, + CKA_ID, &id); + if (rv != SECSuccess) { + fprintf(stderr, "Key %d: couldn't read CKA_ID: %s\n", + i, PORT_ErrorToString(PORT_GetError())); + continue; + } + fprintf(stderr, "id = { "); + dumpItem(stderr, &id); + fprintf(stderr, "};"); + if (id.data[1] == LEAK_ID) { + fprintf(stderr, " ---> leak expected\n"); + if (id.data[0] == round) + leak_found = 1; + } else { + if (id.len != sizeof(cka_id)) { + fprintf(stderr, + " ---> ERROR unexpected leak in generated key\n"); + } else { + fprintf(stderr, + " ---> ERROR unexpected leak in constructed key\n"); + } + failed = 1; + } + SECITEM_FreeItem(&id, PR_FALSE); + } + PK11_DestroyGenericObjects(tstPrivKey); + } + if (expect_leak && !leak_found) { + fprintf(stderr, "ERROR expected leak not found\n"); + failed = 1; + } PK11_FreeSlot(slot); return failed ? -1 : 0; @@ -517,7 +618,7 @@ main(int argc, char **argv) exp_exp_prime_fail_count = 0; for (i = 0; i < repeat; i++) { printf("Running RSA Populate test run %d\n", i); - ret = doRSAPopulateTest(keySize, exponent, mask, NULL); + ret = doRSAPopulateTest(keySize, exponent, mask, i, NULL); if (ret != 0) { i++; break; @@ -531,5 +632,9 @@ main(int argc, char **argv) exp_exp_prime_fail_count, i, (((double)exp_exp_prime_fail_count) * 100.0) / (double)i); } + if (NSS_Shutdown() != SECSuccess) { + fprintf(stderr, "Shutdown failed\n"); + ret = -1; + } return ret; } diff --git a/security/nss/cmd/rsapoptst/rsapoptst.gyp b/security/nss/cmd/rsapoptst/rsapoptst.gyp new file mode 100644 index 000000000000..325a109095db --- /dev/null +++ b/security/nss/cmd/rsapoptst/rsapoptst.gyp @@ -0,0 +1,25 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +{ + 'includes': [ + '../../coreconf/config.gypi', + '../../cmd/platlibs.gypi' + ], + 'targets': [ + { + 'target_name': 'rsapoptst', + 'type': 'executable', + 'sources': [ + 'rsapoptst.c' + ], + 'dependencies': [ + '<(DEPTH)/exports.gyp:dbm_exports', + '<(DEPTH)/exports.gyp:nss_exports', + ] + } + ], + 'variables': { + 'module': 'nss', + } +} diff --git a/security/nss/coreconf/coreconf.dep b/security/nss/coreconf/coreconf.dep index 5182f75552c8..590d1bfaeee3 100644 --- a/security/nss/coreconf/coreconf.dep +++ b/security/nss/coreconf/coreconf.dep @@ -10,3 +10,4 @@ */ #error "Do not include this header file." + diff --git a/security/nss/cpputil/cpputil.gyp b/security/nss/cpputil/cpputil.gyp index 82183f241dc2..5042acf5cd14 100644 --- a/security/nss/cpputil/cpputil.gyp +++ b/security/nss/cpputil/cpputil.gyp @@ -10,6 +10,7 @@ 'target_name': 'cpputil', 'type': 'static_library', 'sources': [ + 'databuffer.cc', 'dummy_io.cc', 'dummy_io_fwd.cc', 'tls_parser.cc', diff --git a/security/nss/cpputil/databuffer.cc b/security/nss/cpputil/databuffer.cc new file mode 100644 index 000000000000..1defde213603 --- /dev/null +++ b/security/nss/cpputil/databuffer.cc @@ -0,0 +1,116 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "databuffer.h" +#include +#include +#include +#include +#include +#if defined(WIN32) || defined(WIN64) +#include +#else +#include +#endif + +namespace nss_test { + +void DataBuffer::Assign(const uint8_t* data, size_t len) { + if (data) { + Allocate(len); + memcpy(static_cast(data_), static_cast(data), len); + } else { + assert(len == 0); + data_ = nullptr; + len_ = 0; + } +} + +// Write will do a new allocation and expand the size of the buffer if needed. +// Returns the offset of the end of the write. +size_t DataBuffer::Write(size_t index, const uint8_t* val, size_t count) { + assert(val); + if (index + count > len_) { + size_t newlen = index + count; + uint8_t* tmp = new uint8_t[newlen]; // Always > 0. + if (data_) { + memcpy(static_cast(tmp), static_cast(data_), len_); + } + if (index > len_) { + memset(static_cast(tmp + len_), 0, index - len_); + } + delete[] data_; + data_ = tmp; + len_ = newlen; + } + if (data_) { + memcpy(static_cast(data_ + index), static_cast(val), + count); + } + return index + count; +} + +// Write an integer, also performing host-to-network order conversion. +// Returns the offset of the end of the write. +size_t DataBuffer::Write(size_t index, uint32_t val, size_t count) { + assert(count <= sizeof(uint32_t)); + uint32_t nvalue = htonl(val); + auto* addr = reinterpret_cast(&nvalue); + return Write(index, addr + sizeof(uint32_t) - count, count); +} + +// This can't use the same trick as Write(), since we might be reading from a +// smaller data source. +bool DataBuffer::Read(size_t index, size_t count, uint32_t* val) const { + assert(count < sizeof(uint32_t)); + assert(val); + if ((index > len()) || (count > (len() - index))) { + return false; + } + *val = 0; + for (size_t i = 0; i < count; ++i) { + *val = (*val << 8) | data()[index + i]; + } + return true; +} + +void DataBuffer::Splice(const uint8_t* ins, size_t ins_len, size_t index, + size_t remove) { + assert(ins); + uint8_t* old_value = data_; + size_t old_len = len_; + + // The amount of stuff remaining from the tail of the old. + size_t tail_len = old_len - (std::min)(old_len, index + remove); + // The new length: the head of the old, the new, and the tail of the old. + len_ = index + ins_len + tail_len; + data_ = new uint8_t[len_ ? len_ : 1]; + + // The head of the old. + if (old_value) { + Write(0, old_value, (std::min)(old_len, index)); + } + // Maybe a gap. + if (old_value && index > old_len) { + memset(old_value + index, 0, index - old_len); + } + // The new. + Write(index, ins, ins_len); + // The tail of the old. + if (tail_len > 0) { + Write(index + ins_len, old_value + index + remove, tail_len); + } + + delete[] old_value; +} + +size_t DataBuffer::logging_limit = 32; + +/* static */ void DataBuffer::SetLogLimit(size_t limit) { + DataBuffer::logging_limit = limit; +} + +} // namespace nss_test diff --git a/security/nss/cpputil/databuffer.h b/security/nss/cpputil/databuffer.h index 287cbb2a7053..d909f69f6e5f 100644 --- a/security/nss/cpputil/databuffer.h +++ b/security/nss/cpputil/databuffer.h @@ -8,17 +8,9 @@ #define databuffer_h__ #include -#include #include #include #include -#if defined(WIN32) || defined(WIN64) -#include -#else -#include -#endif - -extern bool g_ssl_gtest_verbose; namespace nss_test { @@ -50,69 +42,22 @@ class DataBuffer { void Assign(const DataBuffer& other) { Assign(other.data(), other.len()); } - void Assign(const uint8_t* data, size_t len) { - if (data) { - Allocate(len); - memcpy(static_cast(data_), static_cast(data), len); - } else { - assert(len == 0); - data_ = nullptr; - len_ = 0; - } - } + void Assign(const uint8_t* data, size_t len); // Write will do a new allocation and expand the size of the buffer if needed. // Returns the offset of the end of the write. - size_t Write(size_t index, const uint8_t* val, size_t count) { - assert(val); - if (index + count > len_) { - size_t newlen = index + count; - uint8_t* tmp = new uint8_t[newlen]; // Always > 0. - if (data_) { - memcpy(static_cast(tmp), static_cast(data_), len_); - } - if (index > len_) { - memset(static_cast(tmp + len_), 0, index - len_); - } - delete[] data_; - data_ = tmp; - len_ = newlen; - } - if (data_) { - memcpy(static_cast(data_ + index), static_cast(val), - count); - } - return index + count; - } - + size_t Write(size_t index, const uint8_t* val, size_t count); size_t Write(size_t index, const DataBuffer& buf) { return Write(index, buf.data(), buf.len()); } // Write an integer, also performing host-to-network order conversion. // Returns the offset of the end of the write. - size_t Write(size_t index, uint32_t val, size_t count) { - assert(count <= sizeof(uint32_t)); - uint32_t nvalue = htonl(val); - auto* addr = reinterpret_cast(&nvalue); - return Write(index, addr + sizeof(uint32_t) - count, count); - } + size_t Write(size_t index, uint32_t val, size_t count); // This can't use the same trick as Write(), since we might be reading from a // smaller data source. - bool Read(size_t index, size_t count, uint32_t* val) const { - assert(count < sizeof(uint32_t)); - assert(val); - if ((index > len()) || (count > (len() - index))) { - return false; - } - *val = 0; - for (size_t i = 0; i < count; ++i) { - *val = (*val << 8) | data()[index + i]; - } - return true; - } - + bool Read(size_t index, size_t count, uint32_t* val) const; // Starting at |index|, remove |remove| bytes and replace them with the // contents of |buf|. void Splice(const DataBuffer& buf, size_t index, size_t remove = 0) { @@ -120,35 +65,7 @@ class DataBuffer { } void Splice(const uint8_t* ins, size_t ins_len, size_t index, - size_t remove = 0) { - assert(ins); - uint8_t* old_value = data_; - size_t old_len = len_; - - // The amount of stuff remaining from the tail of the old. - size_t tail_len = old_len - (std::min)(old_len, index + remove); - // The new length: the head of the old, the new, and the tail of the old. - len_ = index + ins_len + tail_len; - data_ = new uint8_t[len_ ? len_ : 1]; - - // The head of the old. - if (old_value) { - Write(0, old_value, (std::min)(old_len, index)); - } - // Maybe a gap. - if (old_value && index > old_len) { - memset(old_value + index, 0, index - old_len); - } - // The new. - Write(index, ins, ins_len); - // The tail of the old. - if (tail_len > 0) { - Write(index + ins_len, old_value + index + remove, tail_len); - } - - delete[] old_value; - } - + size_t remove = 0); void Append(const DataBuffer& buf) { Splice(buf, len_); } const uint8_t* data() const { return data_; } @@ -156,17 +73,19 @@ class DataBuffer { size_t len() const { return len_; } bool empty() const { return len_ == 0; } + static void SetLogLimit(size_t limit); + friend std::ostream& operator<<(std::ostream& stream, const DataBuffer& buf); + private: + static size_t logging_limit; uint8_t* data_; size_t len_; }; -static const size_t kMaxBufferPrint = 32; - inline std::ostream& operator<<(std::ostream& stream, const DataBuffer& buf) { stream << "[" << buf.len() << "] "; for (size_t i = 0; i < buf.len(); ++i) { - if (!g_ssl_gtest_verbose && i >= kMaxBufferPrint) { + if (i >= DataBuffer::logging_limit) { stream << "..."; break; } diff --git a/security/nss/cpputil/manifest.mn b/security/nss/cpputil/manifest.mn index c515b8c2c732..b3ccad8b599c 100644 --- a/security/nss/cpputil/manifest.mn +++ b/security/nss/cpputil/manifest.mn @@ -13,6 +13,7 @@ CPPSRCS = \ $(NULL) else CPPSRCS = \ + databuffer.cc \ dummy_io.cc \ dummy_io_fwd.cc \ tls_parser.cc \ diff --git a/security/nss/doc/certutil.xml b/security/nss/doc/certutil.xml index 461b213898e1..d5062bd5eb25 100644 --- a/security/nss/doc/certutil.xml +++ b/security/nss/doc/certutil.xml @@ -455,6 +455,16 @@ of the attribute codes: Set an alternate exponent value to use in generating a new RSA public key for the database, instead of the default value of 65537. The available alternate values are 3 and 17. + + --pss + Restrict the generated certificate (with the option) or certificate request (with the option) to be used with the RSA-PSS signature scheme. This only works when the private key of the certificate or certificate request is RSA. + + + + --pss-sign + Sign the generated certificate with the RSA-PSS signature scheme (with the or option). This only works when the private key of the signer's certificate is RSA. If the signer's certificate is restricted to RSA-PSS, it is not necessary to specify this option. + + -z noise-file Read a seed value from the specified file to generate a new private and public key pair. This argument makes it possible to use hardware-generated seed values or manually create a value from the keyboard. The minimum file size is 20 bytes. diff --git a/security/nss/doc/html/certutil.html b/security/nss/doc/html/certutil.html index eb2e94322b09..902d1309a4ee 100644 --- a/security/nss/doc/html/certutil.html +++ b/security/nss/doc/html/certutil.html @@ -1,4 +1,4 @@ -CERTUTIL

Name

certutil — Manage keys and certificate in both NSS databases and other NSS tokens

Synopsis

certutil [options] [[arguments]]

STATUS

This documentation is still work in progress. Please contribute to the initial review in Mozilla NSS bug 836477 +CERTUTIL

Name

certutil — Manage keys and certificate in both NSS databases and other NSS tokens

Synopsis

certutil [options] [[arguments]]

STATUS

This documentation is still work in progress. Please contribute to the initial review in Mozilla NSS bug 836477

Description

The Certificate Database Tool, certutil, is a command-line utility that can create and modify certificate and key databases. It can specifically list, generate, modify, or delete certificates, create or change the password, generate new public and private key pairs, display the contents of the key database, or delete key pairs within the key database.

Certificate issuance, part of the key and certificate management process, requires that keys and certificates be created in the key database. This document discusses certificate and key database management. For information on the security module database management, see the modutil manpage.

Command Options and Arguments

Running certutil always requires one and only one command option to specify the type of certificate operation. Each command option may take zero or more arguments. The command option -H will list all the command options and their relevant arguments.

Command Options

-A

Add an existing certificate to a certificate database. The certificate database should already exist; if one is not present, this command option will initialize one by default.

-B

Run a series of commands from the specified batch file. This requires the -i argument.

-C

Create a new binary certificate file from a binary certificate request file. Use the -i argument to specify the certificate request file. If this argument is not used, certutil prompts for a filename.

-D

Delete a certificate from the certificate database.

--rename

Change the database nickname of a certificate.

-E

Add an email certificate to the certificate database.

-F

Delete a private key from a key database. Specify the key to delete with the -n argument. Specify the database from which to delete the key with the -d argument. Use the -k argument to specify explicitly whether to delete a DSA, RSA, or ECC key. If you don't use the -k argument, the option looks for an RSA key matching the specified nickname.

@@ -20,25 +20,26 @@ Add one or multiple extensions that certutil cannot encode yet, by loading their duplicate nicknames. Giving a key type generates a new key pair; giving the ID of an existing key reuses that key pair (which is required to renew certificates). -

-l

Display detailed information when validating a certificate with the -V option.

-m serial-number

Assign a unique serial number to a certificate being created. This operation should be performed by a CA. If no serial number is provided a default serial number is made from the current time. Serial numbers are limited to integers

-n nickname

Specify the nickname of a certificate or key to list, create, add to a database, modify, or validate. Bracket the nickname string with quotation marks if it contains spaces.

-o output-file

Specify the output file name for new certificates or binary certificate requests. Bracket the output-file string with quotation marks if it contains spaces. If this argument is not used the output destination defaults to standard output.

-P dbPrefix

Specify the prefix used on the certificate and key database file. This argument is provided to support legacy servers. Most applications do not use a database prefix.

-p phone

Specify a contact telephone number to include in new certificates or certificate requests. Bracket this string with quotation marks if it contains spaces.

-q pqgfile or curve-name

Read an alternate PQG value from the specified file when generating DSA key pairs. If this argument is not used, certutil generates its own PQG value. PQG files are created with a separate DSA utility.

Elliptic curve name is one of the ones from nistp256, nistp384, nistp521, curve25519.

If a token is available that supports more curves, the foolowing curves are supported as well: - sect163k1, nistk163, sect163r1, sect163r2, - nistb163, sect193r1, sect193r2, sect233k1, nistk233, - sect233r1, nistb233, sect239k1, sect283k1, nistk283, - sect283r1, nistb283, sect409k1, nistk409, sect409r1, - nistb409, sect571k1, nistk571, sect571r1, nistb571, - secp160k1, secp160r1, secp160r2, secp192k1, secp192r1, - nistp192, secp224k1, secp224r1, nistp224, secp256k1, - secp256r1, secp384r1, secp521r1, - prime192v1, prime192v2, prime192v3, - prime239v1, prime239v2, prime239v3, c2pnb163v1, - c2pnb163v2, c2pnb163v3, c2pnb176v1, c2tnb191v1, - c2tnb191v2, c2tnb191v3, - c2pnb208w1, c2tnb239v1, c2tnb239v2, c2tnb239v3, - c2pnb272w1, c2pnb304w1, - c2tnb359w1, c2pnb368w1, c2tnb431r1, secp112r1, - secp112r2, secp128r1, secp128r2, sect113r1, sect113r2, - sect131r1, sect131r2

-
-r

Display a certificate's binary DER encoding when listing information about that certificate with the -L option.

-s subject

Identify a particular certificate owner for new certificates or certificate requests. Bracket this string with quotation marks if it contains spaces. The subject identification format follows RFC #1485.

-t trustargs

Specify the trust attributes to modify in an existing certificate or to apply to a certificate when creating it or adding it to a database. There are three available trust categories for each certificate, expressed in the order SSL, email, object signing for each trust setting. In each category position, use none, any, or all +

-l

Display detailed information when validating a certificate with the -V option.

-m serial-number

Assign a unique serial number to a certificate being created. This operation should be performed by a CA. If no serial number is provided a default serial number is made from the current time. Serial numbers are limited to integers

-n nickname

Specify the nickname of a certificate or key to list, create, add to a database, modify, or validate. Bracket the nickname string with quotation marks if it contains spaces.

-o output-file

Specify the output file name for new certificates or binary certificate requests. Bracket the output-file string with quotation marks if it contains spaces. If this argument is not used the output destination defaults to standard output.

-P dbPrefix

Specify the prefix used on the certificate and key database file. This argument is provided to support legacy servers. Most applications do not use a database prefix.

-p phone

Specify a contact telephone number to include in new certificates or certificate requests. Bracket this string with quotation marks if it contains spaces.

-q pqgfile or curve-name

Read an alternate PQG value from the specified file when generating DSA key pairs. If this argument is not used, certutil generates its own PQG value. PQG files are created with a separate DSA utility.

Elliptic curve name is one of the ones from nistp256, nistp384, nistp521, curve25519.

+ If a token is available that supports more curves, the foolowing curves are supported as well: + sect163k1, nistk163, sect163r1, sect163r2, + nistb163, sect193r1, sect193r2, sect233k1, nistk233, + sect233r1, nistb233, sect239k1, sect283k1, nistk283, + sect283r1, nistb283, sect409k1, nistk409, sect409r1, + nistb409, sect571k1, nistk571, sect571r1, nistb571, + secp160k1, secp160r1, secp160r2, secp192k1, secp192r1, + nistp192, secp224k1, secp224r1, nistp224, secp256k1, + secp256r1, secp384r1, secp521r1, + prime192v1, prime192v2, prime192v3, + prime239v1, prime239v2, prime239v3, c2pnb163v1, + c2pnb163v2, c2pnb163v3, c2pnb176v1, c2tnb191v1, + c2tnb191v2, c2tnb191v3, + c2pnb208w1, c2tnb239v1, c2tnb239v2, c2tnb239v3, + c2pnb272w1, c2pnb304w1, + c2tnb359w1, c2pnb368w1, c2tnb431r1, secp112r1, + secp112r2, secp128r1, secp128r2, sect113r1, sect113r2, + sect131r1, sect131r2 +

-r

Display a certificate's binary DER encoding when listing information about that certificate with the -L option.

-s subject

Identify a particular certificate owner for new certificates or certificate requests. Bracket this string with quotation marks if it contains spaces. The subject identification format follows RFC #1485.

-t trustargs

Specify the trust attributes to modify in an existing certificate or to apply to a certificate when creating it or adding it to a database. There are three available trust categories for each certificate, expressed in the order SSL, email, object signing for each trust setting. In each category position, use none, any, or all of the attribute codes:

  • p - Valid peer @@ -59,7 +60,7 @@ of the attribute codes: the certificate or adding it to a database. Express the offset in integers, using a minus sign (-) to indicate a negative offset. If this argument is not used, the validity period begins at the current system time. The length - of the validity period is set with the -v argument.

-X

Force the key and certificate database to open in read-write mode. This is used with the -U and -L command options.

-x

Use certutil to generate the signature for a certificate being created or added to a database, rather than obtaining a signature from a separate CA.

-y exp

Set an alternate exponent value to use in generating a new RSA public key for the database, instead of the default value of 65537. The available alternate values are 3 and 17.

-z noise-file

Read a seed value from the specified file to generate a new private and public key pair. This argument makes it possible to use hardware-generated seed values or manually create a value from the keyboard. The minimum file size is 20 bytes.

-Z hashAlg

Specify the hash algorithm to use with the -C, -S or -R command options. Possible keywords:

  • MD2

  • MD4

  • MD5

  • SHA1

  • SHA224

  • SHA256

  • SHA384

  • SHA512

-0 SSO_password

Set a site security officer password on a token.

-1 | --keyUsage keyword,keyword

Set an X.509 V3 Certificate Type Extension in the certificate. There are several available keywords:

  • + of the validity period is set with the -v argument.

-X

Force the key and certificate database to open in read-write mode. This is used with the -U and -L command options.

-x

Use certutil to generate the signature for a certificate being created or added to a database, rather than obtaining a signature from a separate CA.

-y exp

Set an alternate exponent value to use in generating a new RSA public key for the database, instead of the default value of 65537. The available alternate values are 3 and 17.

--pss

Restrict the generated certificate (with the -S option) or certificate request (with the -R option) to be used with the RSA-PSS signature scheme. This only works when the private key of the certificate or certificate request is RSA.

--pss-sign

Sign the generated certificate with the RSA-PSS signature scheme (with the -C or -S option). This only works when the private key of the signer's certificate is RSA. If the signer's certificate is restricted to RSA-PSS, it is not necessary to specify this option.

-z noise-file

Read a seed value from the specified file to generate a new private and public key pair. This argument makes it possible to use hardware-generated seed values or manually create a value from the keyboard. The minimum file size is 20 bytes.

-Z hashAlg

Specify the hash algorithm to use with the -C, -S or -R command options. Possible keywords:

  • MD2

  • MD4

  • MD5

  • SHA1

  • SHA224

  • SHA256

  • SHA384

  • SHA512

-0 SSO_password

Set a site security officer password on a token.

-1 | --keyUsage keyword,keyword

Set an X.509 V3 Certificate Type Extension in the certificate. There are several available keywords:

  • digitalSignature

  • nonRepudiation diff --git a/security/nss/doc/html/pk12util.html b/security/nss/doc/html/pk12util.html index fe516dd83a09..94dbf51e97ae 100644 --- a/security/nss/doc/html/pk12util.html +++ b/security/nss/doc/html/pk12util.html @@ -1,6 +1,6 @@ -PK12UTIL

    Name

    pk12util — Export and import keys and certificate to or from a PKCS #12 file and the NSS database

    Synopsis

    pk12util [-i p12File|-l p12File|-o p12File] [-d [sql:]directory] [-h tokenname] [-P dbprefix] [-r] [-v] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword]

    STATUS

    This documentation is still work in progress. Please contribute to the initial review in Mozilla NSS bug 836477 -

    Description

    The PKCS #12 utility, pk12util, enables sharing certificates among any server that supports PKCS#12. The tool can import certificates and keys from PKCS#12 files into security databases, export certificates, and list certificates and keys.

    Options and Arguments

    Options

    -i p12file

    Import keys and certificates from a PKCS#12 file into a security database.

    -l p12file

    List the keys and certificates in PKCS#12 file.

    -o p12file

    Export keys and certificates from the security database to a PKCS#12 file.

    Arguments

    -c keyCipher

    Specify the key encryption algorithm.

    -C certCipher

    Specify the key cert (overall package) encryption algorithm.

    -d [sql:]directory

    Specify the database directory into which to import to or export from certificates and keys.

    pk12util supports two types of databases: the legacy security databases (cert8.db, key3.db, and secmod.db) and new SQLite databases (cert9.db, key4.db, and pkcs11.txt). If the prefix sql: is not used, then the tool assumes that the given databases are in the old format.

    -h tokenname

    Specify the name of the token to import into or export from.

    -k slotPasswordFile

    Specify the text file containing the slot's password.

    -K slotPassword

    Specify the slot's password.

    -m | --key-len keyLength

    Specify the desired length of the symmetric key to be used to encrypt the private key.

    -n | --cert-key-len certKeyLength

    Specify the desired length of the symmetric key to be used to encrypt the certificates and other meta-data.

    -n certname

    Specify the nickname of the cert and private key to export.

    -P prefix

    Specify the prefix used on the certificate and key databases. This option is provided as a special case. - Changing the names of the certificate and key databases is not recommended.

    -r

    Dumps all of the data in raw (binary) form. This must be saved as a DER file. The default is to return information in a pretty-print ASCII format, which displays the information about the certificates and public keys in the p12 file.

    -v

    Enable debug logging when importing.

    -w p12filePasswordFile

    Specify the text file containing the pkcs #12 file password.

    -W p12filePassword

    Specify the pkcs #12 file password.

    Return Codes

    • 0 - No error

    • 1 - User Cancelled

    • 2 - Usage error

    • 6 - NLS init error

    • 8 - Certificate DB open error

    • 9 - Key DB open error

    • 10 - File initialization error

    • 11 - Unicode conversion error

    • 12 - Temporary file creation error

    • 13 - PKCS11 get slot error

    • 14 - PKCS12 decoder start error

    • 15 - error read from import file

    • 16 - pkcs12 decode error

    • 17 - pkcs12 decoder verify error

    • 18 - pkcs12 decoder validate bags error

    • 19 - pkcs12 decoder import bags error

    • 20 - key db conversion version 3 to version 2 error

    • 21 - cert db conversion version 7 to version 5 error

    • 22 - cert and key dbs patch error

    • 23 - get default cert db error

    • 24 - find cert by nickname error

    • 25 - create export context error

    • 26 - PKCS12 add password itegrity error

    • 27 - cert and key Safes creation error

    • 28 - PKCS12 add cert and key error

    • 29 - PKCS12 encode error

    Examples

    Importing Keys and Certificates

    The most basic usage of pk12util for importing a certificate or key is the PKCS#12 input file (-i) and some way to specify the security database being accessed (either -d for a directory or -h for a token). +PK12UTIL

    Name

    pk12util — Export and import keys and certificate to or from a PKCS #12 file and the NSS database

    Synopsis

    pk12util [-i p12File|-l p12File|-o p12File] [-d [sql:]directory] [-h tokenname] [-P dbprefix] [-r] [-v] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword]

    STATUS

    This documentation is still work in progress. Please contribute to the initial review in Mozilla NSS bug 836477 +

    Description

    The PKCS #12 utility, pk12util, enables sharing certificates among any server that supports PKCS #12. The tool can import certificates and keys from PKCS #12 files into security databases, export certificates, and list certificates and keys.

    Options and Arguments

    Options

    -i p12file

    Import keys and certificates from a PKCS #12 file into a security database.

    -l p12file

    List the keys and certificates in PKCS #12 file.

    -o p12file

    Export keys and certificates from the security database to a PKCS #12 file.

    Arguments

    -c keyCipher

    Specify the key encryption algorithm.

    -C certCipher

    Specify the certiticate encryption algorithm.

    -d [sql:]directory

    Specify the database directory into which to import to or export from certificates and keys.

    pk12util supports two types of databases: the legacy security databases (cert8.db, key3.db, and secmod.db) and new SQLite databases (cert9.db, key4.db, and pkcs11.txt). If the prefix sql: is not used, then the tool assumes that the given databases are in the old format.

    -h tokenname

    Specify the name of the token to import into or export from.

    -k slotPasswordFile

    Specify the text file containing the slot's password.

    -K slotPassword

    Specify the slot's password.

    -m | --key-len keyLength

    Specify the desired length of the symmetric key to be used to encrypt the private key.

    -n | --cert-key-len certKeyLength

    Specify the desired length of the symmetric key to be used to encrypt the certificates and other meta-data.

    -n certname

    Specify the nickname of the cert and private key to export.

    -P prefix

    Specify the prefix used on the certificate and key databases. This option is provided as a special case. + Changing the names of the certificate and key databases is not recommended.

    -r

    Dumps all of the data in raw (binary) form. This must be saved as a DER file. The default is to return information in a pretty-print ASCII format, which displays the information about the certificates and public keys in the p12 file.

    -v

    Enable debug logging when importing.

    -w p12filePasswordFile

    Specify the text file containing the pkcs #12 file password.

    -W p12filePassword

    Specify the pkcs #12 file password.

    Return Codes

    • 0 - No error

    • 1 - User Cancelled

    • 2 - Usage error

    • 6 - NLS init error

    • 8 - Certificate DB open error

    • 9 - Key DB open error

    • 10 - File initialization error

    • 11 - Unicode conversion error

    • 12 - Temporary file creation error

    • 13 - PKCS11 get slot error

    • 14 - PKCS12 decoder start error

    • 15 - error read from import file

    • 16 - pkcs12 decode error

    • 17 - pkcs12 decoder verify error

    • 18 - pkcs12 decoder validate bags error

    • 19 - pkcs12 decoder import bags error

    • 20 - key db conversion version 3 to version 2 error

    • 21 - cert db conversion version 7 to version 5 error

    • 22 - cert and key dbs patch error

    • 23 - get default cert db error

    • 24 - find cert by nickname error

    • 25 - create export context error

    • 26 - PKCS12 add password itegrity error

    • 27 - cert and key Safes creation error

    • 28 - PKCS12 add cert and key error

    • 29 - PKCS12 encode error

    Examples

    Importing Keys and Certificates

    The most basic usage of pk12util for importing a certificate or key is the PKCS #12 input file (-i) and some way to specify the security database being accessed (either -d for a directory or -h for a token).

    pk12util -i p12File [-h tokenname] [-v] [-d [sql:]directory] [-P dbprefix] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword]

    For example:

    # pk12util -i /tmp/cert-files/users.p12 -d sql:/home/my/sharednssdb
    @@ -12,7 +12,7 @@ and should contain at least one non-alphabetic character.
     Enter new password: 
     Re-enter password: 
     Enter password for PKCS12 file: 
    -pk12util: PKCS12 IMPORT SUCCESSFUL

    Exporting Keys and Certificates

    Using the pk12util command to export certificates and keys requires both the name of the certificate to extract from the database (-n) and the PKCS#12-formatted output file to write to. There are optional parameters that can be used to encrypt the file to protect the certificate material. +pk12util: PKCS12 IMPORT SUCCESSFUL

    Exporting Keys and Certificates

    Using the pk12util command to export certificates and keys requires both the name of the certificate to extract from the database (-n) and the PKCS #12-formatted output file to write to. There are optional parameters that can be used to encrypt the file to protect the certificate material.

    pk12util -o p12File -n certname [-c keyCipher] [-C certCipher] [-m|--key_len keyLen] [-n|--cert_key_len certKeyLen] [-d [sql:]directory] [-P dbprefix] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword]

    For example:

    # pk12util -o certs.p12 -n Server-Cert -d sql:/home/my/sharednssdb
     Enter password for PKCS12 file: 
     Re-enter password: 

    Listing Keys and Certificates

    The information in a .p12 file are not human-readable. The certificates and keys in the file can be printed (listed) in a human-readable pretty-print format that shows information for every certificate and any public keys in the .p12 file. @@ -48,7 +48,7 @@ Key(shrouded): Certificate Friendly Name: Thawte Personal Freemail Issuing CA - Thawte Consulting Certificate Friendly Name: Thawte Freemail Member's Thawte Consulting (Pty) Ltd. ID -

    Password Encryption

    PKCS#12 provides for not only the protection of the private keys but also the certificate and meta-data associated with the keys. Password-based encryption is used to protect private keys on export to a PKCS#12 file and, optionally, the entire package. If no algorithm is specified, the tool defaults to using PKCS12 V2 PBE with SHA1 and 3KEY Triple DES-cbc for private key encryption. PKCS12 V2 PBE with SHA1 and 40 Bit RC4 is the default for the overall package encryption when not in FIPS mode. When in FIPS mode, there is no package encryption.

    The private key is always protected with strong encryption by default.

    Several types of ciphers are supported.

    Symmetric CBC ciphers for PKCS#5 V2
    • DES-CBC

    • RC2-CBC

    • RC5-CBCPad

    • DES-EDE3-CBC (the default for key encryption)

    • AES-128-CBC

    • AES-192-CBC

    • AES-256-CBC

    • CAMELLIA-128-CBC

    • CAMELLIA-192-CBC

    • CAMELLIA-256-CBC

    PKCS#12 PBE ciphers
    • PKCS #12 PBE with Sha1 and 128 Bit RC4

    • PKCS #12 PBE with Sha1 and 40 Bit RC4

    • PKCS #12 PBE with Sha1 and Triple DES CBC

    • PKCS #12 PBE with Sha1 and 128 Bit RC2 CBC

    • PKCS #12 PBE with Sha1 and 40 Bit RC2 CBC

    • PKCS12 V2 PBE with SHA1 and 128 Bit RC4

    • PKCS12 V2 PBE with SHA1 and 40 Bit RC4 (the default for non-FIPS mode)

    • PKCS12 V2 PBE with SHA1 and 3KEY Triple DES-cbc

    • PKCS12 V2 PBE with SHA1 and 2KEY Triple DES-cbc

    • PKCS12 V2 PBE with SHA1 and 128 Bit RC2 CBC

    • PKCS12 V2 PBE with SHA1 and 40 Bit RC2 CBC

    PKCS#5 PBE ciphers
    • PKCS #5 Password Based Encryption with MD2 and DES CBC

    • PKCS #5 Password Based Encryption with MD5 and DES CBC

    • PKCS #5 Password Based Encryption with SHA1 and DES CBC

    With PKCS#12, the crypto provider may be the soft token module or an external hardware module. If the cryptographic module does not support the requested algorithm, then the next best fit will be selected (usually the default). If no suitable replacement for the desired algorithm can be found, the tool returns the error no security module can perform the requested operation.

    NSS Database Types

    NSS originally used BerkeleyDB databases to store security information. +

    Password Encryption

    PKCS #12 provides for not only the protection of the private keys but also the certificate and meta-data associated with the keys. Password-based encryption is used to protect private keys on export to a PKCS #12 file and, optionally, the associated certificates. If no algorithm is specified, the tool defaults to using PKCS #12 SHA-1 and 3-key triple DES for private key encryption. When not in FIPS mode, PKCS #12 SHA-1 and 40-bit RC4 is used for certificate encryption. When in FIPS mode, there is no certificate encryption. If certificate encryption is not wanted, specify "NONE" as the argument of the -C option.

    The private key is always protected with strong encryption by default.

    Several types of ciphers are supported.

    PKCS #5 password-based encryption
    • PBES2 with AES-CBC-Pad as underlying encryption scheme ("AES-128-CBC", "AES-192-CBC", and "AES-256-CBC")

    PKCS #12 password-based encryption
    • SHA-1 and 128-bit RC4 ("PKCS #12 V2 PBE With SHA-1 And 128 Bit RC4" or "RC4")

    • SHA-1 and 40-bit RC4 ("PKCS #12 V2 PBE With SHA-1 And 40 Bit RC4") (used by default for certificate encryption in non-FIPS mode)

    • SHA-1 and 3-key triple-DES ("PKCS #12 V2 PBE With SHA-1 And 3KEY Triple DES-CBC" or "DES-EDE3-CBC")

    • SHA-1 and 128-bit RC2 ("PKCS #12 V2 PBE With SHA-1 And 128 Bit RC2 CBC" or "RC2-CBC")

    • SHA-1 and 40-bit RC2 ("PKCS #12 V2 PBE With SHA-1 And 40 Bit RC2 CBC")

    With PKCS #12, the crypto provider may be the soft token module or an external hardware module. If the cryptographic module does not support the requested algorithm, then the next best fit will be selected (usually the default). If no suitable replacement for the desired algorithm can be found, the tool returns the error no security module can perform the requested operation.

    NSS Database Types

    NSS originally used BerkeleyDB databases to store security information. The last versions of these legacy databases are:

    • cert8.db for certificates

    • @@ -68,7 +68,7 @@ BerkleyDB. These new databases provide more accessibility and performance:

      sql: prefix with the given security directory. For example:

      # pk12util -i /tmp/cert-files/users.p12 -d sql:/home/my/sharednssdb

      To set the shared database type as the default type for the tools, set the NSS_DEFAULT_DB_TYPE environment variable to sql:

      export NSS_DEFAULT_DB_TYPE="sql"

      This line can be set added to the ~/.bashrc file to make the change permanent.

      Most applications do not use the shared database by default, but they can be configured to use them. For example, this how-to article covers how to configure Firefox and Thunderbird to use the new shared NSS databases:

      • https://wiki.mozilla.org/NSS_Shared_DB_Howto

      For an engineering draft on the changes in the shared NSS databases, see the NSS project wiki:

      • https://wiki.mozilla.org/NSS_Shared_DB -

    See Also

    certutil (1)

    modutil (1)

    The NSS wiki has information on the new database design and how to configure applications to use it.

    • +

    Compatibility Notes

    The exporting behavior of pk12util has changed over time, while importing files exported with older versions of NSS is still supported.

    Until the 3.30 release, pk12util used the UTF-16 encoding for the PKCS #5 password-based encryption schemes, while the recommendation is to encode passwords in UTF-8 if the used encryption scheme is defined outside of the PKCS #12 standard.

    Until the 3.31 release, even when "AES-128-CBC" or "AES-192-CBC" is given from the command line, pk12util always used 256-bit AES as the underlying encryption scheme.

    For historical reasons, pk12util accepts password-based encryption schemes not listed in this document. However, those schemes are not officially supported and may have issues in interoperability with other tools.

    See Also

    certutil (1)

    modutil (1)

    The NSS wiki has information on the new database design and how to configure applications to use it.

    • https://wiki.mozilla.org/NSS_Shared_DB_Howto

    • https://wiki.mozilla.org/NSS_Shared_DB

    Additional Resources

    For information about NSS and other tools related to NSS (like JSS), check out the NSS project wiki at http://www.mozilla.org/projects/security/pki/nss/. The NSS site relates directly to NSS code changes and releases.

    Mailing lists: https://lists.mozilla.org/listinfo/dev-tech-crypto

    IRC: Freenode at #dogtag-pki

    Authors

    The NSS tools were written and maintained by developers with Netscape, Red Hat, Sun, Oracle, Mozilla, and Google.

    diff --git a/security/nss/doc/nroff/certutil.1 b/security/nss/doc/nroff/certutil.1 index b2a8bd2bb86a..80a02fc2765b 100644 --- a/security/nss/doc/nroff/certutil.1 +++ b/security/nss/doc/nroff/certutil.1 @@ -1,13 +1,13 @@ '\" t .\" Title: CERTUTIL .\" Author: [see the "Authors" section] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 8 September 2016 +.\" Generator: DocBook XSL Stylesheets vsnapshot +.\" Date: 27 October 2017 .\" Manual: NSS Security Tools .\" Source: nss-tools .\" Language: English .\" -.TH "CERTUTIL" "1" "8 September 2016" "nss-tools" "NSS Security Tools" +.TH "CERTUTIL" "1" "27 October 2017" "nss-tools" "NSS Security Tools" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -371,9 +371,9 @@ Read an alternate PQG value from the specified file when generating DSA key pair \fBcertutil\fR generates its own PQG value\&. PQG files are created with a separate DSA utility\&. .sp -Elliptic curve name is one of the ones from nistp256, nistp384, nistp521, curve25519. +Elliptic curve name is one of the ones from nistp256, nistp384, nistp521, curve25519\&. .sp -If a token is available that supports more curves, the foolowing curves are supported as well: sect163k1, nistk163, sect163r1, sect163r2, nistb163, sect193r1, sect193r2, sect233k1, nistk233, sect233r1, nistb233, sect239k1, sect283k1, nistk283, sect283r1, nistb283, sect409k1, nistk409, sect409r1, nistb409, sect571k1, nistk571, sect571r1, nistb571, secp160k1, secp160r1, secp160r2, secp192k1, secp192r1, nistp192, secp224k1, secp224r1, nistp224, secp256k1, secp256r1, secp384r1, secp521r1, prime192v1, prime192v2, prime192v3, prime239v1, prime239v2, prime239v3, c2pnb163v1, c2pnb163v2, c2pnb163v3, c2pnb176v1, c2tnb191v1, c2tnb191v2, c2tnb191v3, c2pnb208w1, c2tnb239v1, c2tnb239v2, c2tnb239v3, c2pnb272w1, c2pnb304w1, c2tnb359w1, c2pnb368w1, c2tnb431r1, secp112r1, secp112r2, secp128r1, secp128r2, sect113r1, sect113r2, sect131r1, sect131r2 +If a token is available that supports more curves, the foolowing curves are supported as well: sect163k1, nistk163, sect163r1, sect163r2, nistb163, sect193r1, sect193r2, sect233k1, nistk233, sect233r1, nistb233, sect239k1, sect283k1, nistk283, sect283r1, nistb283, sect409k1, nistk409, sect409r1, nistb409, sect571k1, nistk571, sect571r1, nistb571, secp160k1, secp160r1, secp160r2, secp192k1, secp192r1, nistp192, secp224k1, secp224r1, nistp224, secp256k1, secp256r1, secp384r1, secp521r1, prime192v1, prime192v2, prime192v3, prime239v1, prime239v2, prime239v3, c2pnb163v1, c2pnb163v2, c2pnb163v3, c2pnb176v1, c2tnb191v1, c2tnb191v2, c2tnb191v3, c2pnb208w1, c2tnb239v1, c2tnb239v2, c2tnb239v3, c2pnb272w1, c2pnb304w1, c2tnb359w1, c2pnb368w1, c2tnb431r1, secp112r1, secp112r2, secp128r1, secp128r2, sect113r1, sect113r2, sect131r1, sect131r2 .RE .PP \-r @@ -609,6 +609,24 @@ to generate the signature for a certificate being created or added to a database Set an alternate exponent value to use in generating a new RSA public key for the database, instead of the default value of 65537\&. The available alternate values are 3 and 17\&. .RE .PP +\-\-pss +.RS 4 +Restrict the generated certificate (with the +\fB\-S\fR +option) or certificate request (with the +\fB\-R\fR +option) to be used with the RSA\-PSS signature scheme\&. This only works when the private key of the certificate or certificate request is RSA\&. +.RE +.PP +\-\-pss\-sign +.RS 4 +Sign the generated certificate with the RSA\-PSS signature scheme (with the +\fB\-C\fR +or +\fB\-S\fR +option)\&. This only works when the private key of the signer\*(Aqs certificate is RSA\&. If the signer\*(Aqs certificate is restricted to RSA\-PSS, it is not necessary to specify this option\&. +.RE +.PP \-z noise\-file .RS 4 Read a seed value from the specified file to generate a new private and public key pair\&. This argument makes it possible to use hardware\-generated seed values or manually create a value from the keyboard\&. The minimum file size is 20 bytes\&. @@ -1512,7 +1530,8 @@ There are ways to narrow the keys listed in the search results: .IP \(bu 2.3 .\} To return a specific key, use the -\fB\-n\fR\fIname\fR +\fB\-n\fR +\fIname\fR argument with the name of the key\&. .RE .sp @@ -1525,7 +1544,8 @@ argument with the name of the key\&. .IP \(bu 2.3 .\} If there are multiple security devices loaded, then the -\fB\-h\fR\fItokenname\fR +\fB\-h\fR +\fItokenname\fR argument can search a specific token or all tokens\&. .RE .sp @@ -1538,7 +1558,8 @@ argument can search a specific token or all tokens\&. .IP \(bu 2.3 .\} If there are multiple key types available, then the -\fB\-k\fR\fIkey\-type\fR +\fB\-k\fR +\fIkey\-type\fR argument can search a specific type of key, like RSA, DSA, or ECC\&. .RE .PP diff --git a/security/nss/doc/nroff/pk12util.1 b/security/nss/doc/nroff/pk12util.1 index c4fa972c0a29..e0a8da833e79 100644 --- a/security/nss/doc/nroff/pk12util.1 +++ b/security/nss/doc/nroff/pk12util.1 @@ -1,13 +1,13 @@ '\" t .\" Title: PK12UTIL .\" Author: [see the "Authors" section] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 5 June 2014 +.\" Generator: DocBook XSL Stylesheets vsnapshot +.\" Date: 27 October 2017 .\" Manual: NSS Security Tools .\" Source: nss-tools .\" Language: English .\" -.TH "PK12UTIL" "1" "5 June 2014" "nss-tools" "NSS Security Tools" +.TH "PK12UTIL" "1" "27 October 2017" "nss-tools" "NSS Security Tools" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -39,24 +39,24 @@ This documentation is still work in progress\&. Please contribute to the initial .SH "DESCRIPTION" .PP The PKCS #12 utility, -\fBpk12util\fR, enables sharing certificates among any server that supports PKCS#12\&. The tool can import certificates and keys from PKCS#12 files into security databases, export certificates, and list certificates and keys\&. +\fBpk12util\fR, enables sharing certificates among any server that supports PKCS #12\&. The tool can import certificates and keys from PKCS #12 files into security databases, export certificates, and list certificates and keys\&. .SH "OPTIONS AND ARGUMENTS" .PP \fBOptions\fR .PP \-i p12file .RS 4 -Import keys and certificates from a PKCS#12 file into a security database\&. +Import keys and certificates from a PKCS #12 file into a security database\&. .RE .PP \-l p12file .RS 4 -List the keys and certificates in PKCS#12 file\&. +List the keys and certificates in PKCS #12 file\&. .RE .PP \-o p12file .RS 4 -Export keys and certificates from the security database to a PKCS#12 file\&. +Export keys and certificates from the security database to a PKCS #12 file\&. .RE .PP \fBArguments\fR @@ -68,7 +68,7 @@ Specify the key encryption algorithm\&. .PP \-C certCipher .RS 4 -Specify the key cert (overall package) encryption algorithm\&. +Specify the certiticate encryption algorithm\&. .RE .PP \-d [sql:]directory @@ -432,7 +432,7 @@ Specify the pkcs #12 file password\&. .PP The most basic usage of \fBpk12util\fR -for importing a certificate or key is the PKCS#12 input file (\fB\-i\fR) and some way to specify the security database being accessed (either +for importing a certificate or key is the PKCS #12 input file (\fB\-i\fR) and some way to specify the security database being accessed (either \fB\-d\fR for a directory or \fB\-h\fR @@ -467,7 +467,7 @@ pk12util: PKCS12 IMPORT SUCCESSFUL .PP Using the \fBpk12util\fR -command to export certificates and keys requires both the name of the certificate to extract from the database (\fB\-n\fR) and the PKCS#12\-formatted output file to write to\&. There are optional parameters that can be used to encrypt the file to protect the certificate material\&. +command to export certificates and keys requires both the name of the certificate to extract from the database (\fB\-n\fR) and the PKCS #12\-formatted output file to write to\&. There are optional parameters that can be used to encrypt the file to protect the certificate material\&. .PP pk12util \-o p12File \-n certname [\-c keyCipher] [\-C certCipher] [\-m|\-\-key_len keyLen] [\-n|\-\-cert_key_len certKeyLen] [\-d [sql:]directory] [\-P dbprefix] [\-k slotPasswordFile|\-K slotPassword] [\-w p12filePasswordFile|\-W p12filePassword] .PP @@ -559,17 +559,17 @@ Certificate Friendly Name: Thawte Freemail Member\*(Aqs Thawte Consulting (Pt .\} .SH "PASSWORD ENCRYPTION" .PP -PKCS#12 provides for not only the protection of the private keys but also the certificate and meta\-data associated with the keys\&. Password\-based encryption is used to protect private keys on export to a PKCS#12 file and, optionally, the entire package\&. If no algorithm is specified, the tool defaults to using -\fBPKCS12 V2 PBE with SHA1 and 3KEY Triple DES\-cbc\fR -for private key encryption\&. -\fBPKCS12 V2 PBE with SHA1 and 40 Bit RC4\fR -is the default for the overall package encryption when not in FIPS mode\&. When in FIPS mode, there is no package encryption\&. +PKCS #12 provides for not only the protection of the private keys but also the certificate and meta\-data associated with the keys\&. Password\-based encryption is used to protect private keys on export to a PKCS #12 file and, optionally, the associated certificates\&. If no algorithm is specified, the tool defaults to using PKCS #12 SHA\-1 and 3\-key triple DES for private key encryption\&. When not in FIPS mode, PKCS #12 SHA\-1 and 40\-bit RC4 is used for certificate encryption\&. When in FIPS mode, there is no certificate encryption\&. If certificate encryption is not wanted, specify +\fB"NONE"\fR +as the argument of the +\fB\-C\fR +option\&. .PP The private key is always protected with strong encryption by default\&. .PP Several types of ciphers are supported\&. .PP -Symmetric CBC ciphers for PKCS#5 V2 +PKCS #5 password\-based encryption .RS 4 .sp .RS 4 @@ -580,110 +580,13 @@ Symmetric CBC ciphers for PKCS#5 V2 .sp -1 .IP \(bu 2.3 .\} -DES\-CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -RC2\-CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -RC5\-CBCPad -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -DES\-EDE3\-CBC (the default for key encryption) -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -AES\-128\-CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -AES\-192\-CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -AES\-256\-CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -CAMELLIA\-128\-CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -CAMELLIA\-192\-CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -CAMELLIA\-256\-CBC +PBES2 with AES\-CBC\-Pad as underlying encryption scheme (\fB"AES\-128\-CBC"\fR, +\fB"AES\-192\-CBC"\fR, and +\fB"AES\-256\-CBC"\fR) .RE .RE .PP -PKCS#12 PBE ciphers +PKCS #12 password\-based encryption .RS 4 .sp .RS 4 @@ -694,7 +597,9 @@ PKCS#12 PBE ciphers .sp -1 .IP \(bu 2.3 .\} -PKCS #12 PBE with Sha1 and 128 Bit RC4 +SHA\-1 and 128\-bit RC4 (\fB"PKCS #12 V2 PBE With SHA\-1 And 128 Bit RC4"\fR +or +\fB"RC4"\fR) .RE .sp .RS 4 @@ -705,7 +610,7 @@ PKCS #12 PBE with Sha1 and 128 Bit RC4 .sp -1 .IP \(bu 2.3 .\} -PKCS #12 PBE with Sha1 and 40 Bit RC4 +SHA\-1 and 40\-bit RC4 (\fB"PKCS #12 V2 PBE With SHA\-1 And 40 Bit RC4"\fR) (used by default for certificate encryption in non\-FIPS mode) .RE .sp .RS 4 @@ -716,7 +621,9 @@ PKCS #12 PBE with Sha1 and 40 Bit RC4 .sp -1 .IP \(bu 2.3 .\} -PKCS #12 PBE with Sha1 and Triple DES CBC +SHA\-1 and 3\-key triple\-DES (\fB"PKCS #12 V2 PBE With SHA\-1 And 3KEY Triple DES\-CBC"\fR +or +\fB"DES\-EDE3\-CBC"\fR) .RE .sp .RS 4 @@ -727,7 +634,9 @@ PKCS #12 PBE with Sha1 and Triple DES CBC .sp -1 .IP \(bu 2.3 .\} -PKCS #12 PBE with Sha1 and 128 Bit RC2 CBC +SHA\-1 and 128\-bit RC2 (\fB"PKCS #12 V2 PBE With SHA\-1 And 128 Bit RC2 CBC"\fR +or +\fB"RC2\-CBC"\fR) .RE .sp .RS 4 @@ -738,114 +647,11 @@ PKCS #12 PBE with Sha1 and 128 Bit RC2 CBC .sp -1 .IP \(bu 2.3 .\} -PKCS #12 PBE with Sha1 and 40 Bit RC2 CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS12 V2 PBE with SHA1 and 128 Bit RC4 -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS12 V2 PBE with SHA1 and 40 Bit RC4 (the default for non\-FIPS mode) -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS12 V2 PBE with SHA1 and 3KEY Triple DES\-cbc -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS12 V2 PBE with SHA1 and 2KEY Triple DES\-cbc -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS12 V2 PBE with SHA1 and 128 Bit RC2 CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS12 V2 PBE with SHA1 and 40 Bit RC2 CBC +SHA\-1 and 40\-bit RC2 (\fB"PKCS #12 V2 PBE With SHA\-1 And 40 Bit RC2 CBC"\fR) .RE .RE .PP -PKCS#5 PBE ciphers -.RS 4 -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS #5 Password Based Encryption with MD2 and DES CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS #5 Password Based Encryption with MD5 and DES CBC -.RE -.sp -.RS 4 -.ie n \{\ -\h'-04'\(bu\h'+03'\c -.\} -.el \{\ -.sp -1 -.IP \(bu 2.3 -.\} -PKCS #5 Password Based Encryption with SHA1 and DES CBC -.RE -.RE -.PP -With PKCS#12, the crypto provider may be the soft token module or an external hardware module\&. If the cryptographic module does not support the requested algorithm, then the next best fit will be selected (usually the default)\&. If no suitable replacement for the desired algorithm can be found, the tool returns the error +With PKCS #12, the crypto provider may be the soft token module or an external hardware module\&. If the cryptographic module does not support the requested algorithm, then the next best fit will be selected (usually the default)\&. If no suitable replacement for the desired algorithm can be found, the tool returns the error \fIno security module can perform the requested operation\fR\&. .SH "NSS DATABASE TYPES" .PP @@ -987,6 +793,27 @@ For an engineering draft on the changes in the shared NSS databases, see the NSS .\} https://wiki\&.mozilla\&.org/NSS_Shared_DB .RE +.SH "COMPATIBILITY NOTES" +.PP +The exporting behavior of +\fBpk12util\fR +has changed over time, while importing files exported with older versions of NSS is still supported\&. +.PP +Until the 3\&.30 release, +\fBpk12util\fR +used the UTF\-16 encoding for the PKCS #5 password\-based encryption schemes, while the recommendation is to encode passwords in UTF\-8 if the used encryption scheme is defined outside of the PKCS #12 standard\&. +.PP +Until the 3\&.31 release, even when +\fB"AES\-128\-CBC"\fR +or +\fB"AES\-192\-CBC"\fR +is given from the command line, +\fBpk12util\fR +always used 256\-bit AES as the underlying encryption scheme\&. +.PP +For historical reasons, +\fBpk12util\fR +accepts password\-based encryption schemes not listed in this document\&. However, those schemes are not officially supported and may have issues in interoperability with other tools\&. .SH "SEE ALSO" .PP certutil (1) diff --git a/security/nss/doc/pk12util.xml b/security/nss/doc/pk12util.xml index 03ee356e651e..c26794965344 100644 --- a/security/nss/doc/pk12util.xml +++ b/security/nss/doc/pk12util.xml @@ -46,7 +46,7 @@ Description - The PKCS #12 utility, pk12util, enables sharing certificates among any server that supports PKCS#12. The tool can import certificates and keys from PKCS#12 files into security databases, export certificates, and list certificates and keys. + The PKCS #12 utility, pk12util, enables sharing certificates among any server that supports PKCS #12. The tool can import certificates and keys from PKCS #12 files into security databases, export certificates, and list certificates and keys. @@ -55,17 +55,17 @@ -i p12file - Import keys and certificates from a PKCS#12 file into a security database. + Import keys and certificates from a PKCS #12 file into a security database. -l p12file - List the keys and certificates in PKCS#12 file. + List the keys and certificates in PKCS #12 file. -o p12file - Export keys and certificates from the security database to a PKCS#12 file. + Export keys and certificates from the security database to a PKCS #12 file. @@ -78,7 +78,7 @@ -C certCipher - Specify the key cert (overall package) encryption algorithm. + Specify the certiticate encryption algorithm. @@ -233,7 +233,7 @@ Examples Importing Keys and Certificates - The most basic usage of pk12util for importing a certificate or key is the PKCS#12 input file () and some way to specify the security database being accessed (either for a directory or for a token). + The most basic usage of pk12util for importing a certificate or key is the PKCS #12 input file () and some way to specify the security database being accessed (either for a directory or for a token). pk12util -i p12File [-h tokenname] [-v] [-d [sql:]directory] [-P dbprefix] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword] @@ -252,7 +252,7 @@ Enter password for PKCS12 file: pk12util: PKCS12 IMPORT SUCCESSFUL Exporting Keys and Certificates - Using the pk12util command to export certificates and keys requires both the name of the certificate to extract from the database () and the PKCS#12-formatted output file to write to. There are optional parameters that can be used to encrypt the file to protect the certificate material. + Using the pk12util command to export certificates and keys requires both the name of the certificate to extract from the database () and the PKCS #12-formatted output file to write to. There are optional parameters that can be used to encrypt the file to protect the certificate material. pk12util -o p12File -n certname [-c keyCipher] [-C certCipher] [-m|--key_len keyLen] [-n|--cert_key_len certKeyLen] [-d [sql:]directory] [-P dbprefix] [-k slotPasswordFile|-K slotPassword] [-w p12filePasswordFile|-W p12filePassword] For example: @@ -304,58 +304,34 @@ Certificate Friendly Name: Thawte Freemail Member's Thawte Consulting (Pty) L Password Encryption - PKCS#12 provides for not only the protection of the private keys but also the certificate and meta-data associated with the keys. Password-based encryption is used to protect private keys on export to a PKCS#12 file and, optionally, the entire package. If no algorithm is specified, the tool defaults to using PKCS12 V2 PBE with SHA1 and 3KEY Triple DES-cbc for private key encryption. PKCS12 V2 PBE with SHA1 and 40 Bit RC4 is the default for the overall package encryption when not in FIPS mode. When in FIPS mode, there is no package encryption. + PKCS #12 provides for not only the protection of the private keys but also the certificate and meta-data associated with the keys. Password-based encryption is used to protect private keys on export to a PKCS #12 file and, optionally, the associated certificates. If no algorithm is specified, the tool defaults to using PKCS #12 SHA-1 and 3-key triple DES for private key encryption. When not in FIPS mode, PKCS #12 SHA-1 and 40-bit RC4 is used for certificate encryption. When in FIPS mode, there is no certificate encryption. If certificate encryption is not wanted, specify "NONE" as the argument of the option. The private key is always protected with strong encryption by default. Several types of ciphers are supported. - Symmetric CBC ciphers for PKCS#5 V2 + PKCS #5 password-based encryption - - DES-CBC - RC2-CBC - RC5-CBCPad - DES-EDE3-CBC (the default for key encryption) - AES-128-CBC - AES-192-CBC - AES-256-CBC - CAMELLIA-128-CBC - CAMELLIA-192-CBC - CAMELLIA-256-CBC - + + PBES2 with AES-CBC-Pad as underlying encryption scheme ("AES-128-CBC", "AES-192-CBC", and "AES-256-CBC") + - PKCS#12 PBE ciphers + PKCS #12 password-based encryption - - PKCS #12 PBE with Sha1 and 128 Bit RC4 - PKCS #12 PBE with Sha1 and 40 Bit RC4 - PKCS #12 PBE with Sha1 and Triple DES CBC - PKCS #12 PBE with Sha1 and 128 Bit RC2 CBC - PKCS #12 PBE with Sha1 and 40 Bit RC2 CBC - PKCS12 V2 PBE with SHA1 and 128 Bit RC4 - PKCS12 V2 PBE with SHA1 and 40 Bit RC4 (the default for non-FIPS mode) - PKCS12 V2 PBE with SHA1 and 3KEY Triple DES-cbc - PKCS12 V2 PBE with SHA1 and 2KEY Triple DES-cbc - PKCS12 V2 PBE with SHA1 and 128 Bit RC2 CBC - PKCS12 V2 PBE with SHA1 and 40 Bit RC2 CBC - - - - PKCS#5 PBE ciphers - - - PKCS #5 Password Based Encryption with MD2 and DES CBC - PKCS #5 Password Based Encryption with MD5 and DES CBC - PKCS #5 Password Based Encryption with SHA1 and DES CBC - + + SHA-1 and 128-bit RC4 ("PKCS #12 V2 PBE With SHA-1 And 128 Bit RC4" or "RC4") + SHA-1 and 40-bit RC4 ("PKCS #12 V2 PBE With SHA-1 And 40 Bit RC4") (used by default for certificate encryption in non-FIPS mode) + SHA-1 and 3-key triple-DES ("PKCS #12 V2 PBE With SHA-1 And 3KEY Triple DES-CBC" or "DES-EDE3-CBC") + SHA-1 and 128-bit RC2 ("PKCS #12 V2 PBE With SHA-1 And 128 Bit RC2 CBC" or "RC2-CBC") + SHA-1 and 40-bit RC2 ("PKCS #12 V2 PBE With SHA-1 And 40 Bit RC2 CBC") + - With PKCS#12, the crypto provider may be the soft token module or an external hardware module. If the cryptographic module does not support the requested algorithm, then the next best fit will be selected (usually the default). If no suitable replacement for the desired algorithm can be found, the tool returns the error no security module can perform the requested operation. + With PKCS #12, the crypto provider may be the soft token module or an external hardware module. If the cryptographic module does not support the requested algorithm, then the next best fit will be selected (usually the default). If no suitable replacement for the desired algorithm can be found, the tool returns the error no security module can perform the requested operation. NSS Database Types @@ -432,6 +408,14 @@ Using the SQLite databases must be manually specified by using the sql: + + Compatibility Notes + The exporting behavior of pk12util has changed over time, while importing files exported with older versions of NSS is still supported. + Until the 3.30 release, pk12util used the UTF-16 encoding for the PKCS #5 password-based encryption schemes, while the recommendation is to encode passwords in UTF-8 if the used encryption scheme is defined outside of the PKCS #12 standard. + Until the 3.31 release, even when "AES-128-CBC" or "AES-192-CBC" is given from the command line, pk12util always used 256-bit AES as the underlying encryption scheme. + For historical reasons, pk12util accepts password-based encryption schemes not listed in this document. However, those schemes are not officially supported and may have issues in interoperability with other tools. + + See Also certutil (1) diff --git a/security/nss/fuzz/tls_mutators.cc b/security/nss/fuzz/tls_mutators.cc index e9770cb39fc7..e61863ad16e1 100644 --- a/security/nss/fuzz/tls_mutators.cc +++ b/security/nss/fuzz/tls_mutators.cc @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#include #include "shared.h" #include "tls_parser.h" diff --git a/security/nss/gtests/cryptohi_gtest/Makefile b/security/nss/gtests/cryptohi_gtest/Makefile new file mode 100644 index 000000000000..0d547e080305 --- /dev/null +++ b/security/nss/gtests/cryptohi_gtest/Makefile @@ -0,0 +1,43 @@ +#! gmake +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +####################################################################### +# (1) Include initial platform-independent assignments (MANDATORY). # +####################################################################### + +include manifest.mn + +####################################################################### +# (2) Include "global" configuration information. (OPTIONAL) # +####################################################################### + +include $(CORE_DEPTH)/coreconf/config.mk + +####################################################################### +# (3) Include "component" configuration information. (OPTIONAL) # +####################################################################### + + +####################################################################### +# (4) Include "local" platform-dependent assignments (OPTIONAL). # +####################################################################### + +include ../common/gtest.mk + +####################################################################### +# (5) Execute "global" rules. (OPTIONAL) # +####################################################################### + +include $(CORE_DEPTH)/coreconf/rules.mk + +####################################################################### +# (6) Execute "component" rules. (OPTIONAL) # +####################################################################### + + +####################################################################### +# (7) Execute "local" rules. (OPTIONAL). # +####################################################################### diff --git a/security/nss/gtests/cryptohi_gtest/cryptohi_gtest.gyp b/security/nss/gtests/cryptohi_gtest/cryptohi_gtest.gyp new file mode 100644 index 000000000000..72c815ecacf2 --- /dev/null +++ b/security/nss/gtests/cryptohi_gtest/cryptohi_gtest.gyp @@ -0,0 +1,29 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +{ + 'includes': [ + '../../coreconf/config.gypi', + '../common/gtest.gypi', + ], + 'targets': [ + { + 'target_name': 'cryptohi_gtest', + 'type': 'executable', + 'sources': [ + 'cryptohi_unittest.cc', + '<(DEPTH)/gtests/common/gtests.cc' + ], + 'dependencies': [ + '<(DEPTH)/exports.gyp:nss_exports', + '<(DEPTH)/gtests/google_test/google_test.gyp:gtest', + '<(DEPTH)/lib/util/util.gyp:nssutil3', + '<(DEPTH)/lib/ssl/ssl.gyp:ssl3', + '<(DEPTH)/lib/nss/nss.gyp:nss3', + ] + } + ], + 'variables': { + 'module': 'nss' + } +} diff --git a/security/nss/gtests/cryptohi_gtest/cryptohi_unittest.cc b/security/nss/gtests/cryptohi_gtest/cryptohi_unittest.cc new file mode 100644 index 000000000000..ab553ee012a6 --- /dev/null +++ b/security/nss/gtests/cryptohi_gtest/cryptohi_unittest.cc @@ -0,0 +1,373 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include + +#include "gtest/gtest.h" + +#include "scoped_ptrs.h" +#include "cryptohi.h" +#include "secitem.h" +#include "secerr.h" + +namespace nss_test { + +class SignParamsTestF : public ::testing::Test { + protected: + ScopedPLArenaPool arena_; + ScopedSECKEYPrivateKey privk_; + ScopedSECKEYPublicKey pubk_; + ScopedSECKEYPrivateKey ecPrivk_; + ScopedSECKEYPublicKey ecPubk_; + + void SetUp() { + arena_.reset(PORT_NewArena(2048)); + + SECKEYPublicKey *pubk; + SECKEYPrivateKey *privk = SECKEY_CreateRSAPrivateKey(1024, &pubk, NULL); + ASSERT_NE(nullptr, pubk); + pubk_.reset(pubk); + ASSERT_NE(nullptr, privk); + privk_.reset(privk); + + SECKEYECParams ecParams = {siBuffer, NULL, 0}; + SECOidData *oidData; + oidData = SECOID_FindOIDByTag(SEC_OID_CURVE25519); + ASSERT_NE(nullptr, oidData); + ASSERT_NE(nullptr, + SECITEM_AllocItem(NULL, &ecParams, (2 + oidData->oid.len))) + << "Couldn't allocate memory for OID."; + ecParams.data[0] = SEC_ASN1_OBJECT_ID; /* we have to prepend 0x06 */ + ecParams.data[1] = oidData->oid.len; + memcpy(ecParams.data + 2, oidData->oid.data, oidData->oid.len); + SECKEYPublicKey *ecPubk; + SECKEYPrivateKey *ecPrivk = + SECKEY_CreateECPrivateKey(&ecParams, &ecPubk, NULL); + ASSERT_NE(nullptr, ecPubk); + ecPubk_.reset(ecPubk); + ASSERT_NE(nullptr, ecPrivk); + ecPrivk_.reset(ecPrivk); + } + + void CreatePssParams(SECKEYRSAPSSParams *params, SECOidTag hashAlgTag) { + PORT_Memset(params, 0, sizeof(SECKEYRSAPSSParams)); + + params->hashAlg = (SECAlgorithmID *)PORT_ArenaZAlloc( + arena_.get(), sizeof(SECAlgorithmID)); + ASSERT_NE(nullptr, params->hashAlg); + SECStatus rv = + SECOID_SetAlgorithmID(arena_.get(), params->hashAlg, hashAlgTag, NULL); + ASSERT_EQ(SECSuccess, rv); + } + + void CreatePssParams(SECKEYRSAPSSParams *params, SECOidTag hashAlgTag, + SECOidTag maskHashAlgTag) { + CreatePssParams(params, hashAlgTag); + + SECAlgorithmID maskHashAlg; + PORT_Memset(&maskHashAlg, 0, sizeof(maskHashAlg)); + SECStatus rv = + SECOID_SetAlgorithmID(arena_.get(), &maskHashAlg, maskHashAlgTag, NULL); + ASSERT_EQ(SECSuccess, rv); + + SECItem *maskHashAlgItem = + SEC_ASN1EncodeItem(arena_.get(), NULL, &maskHashAlg, + SEC_ASN1_GET(SECOID_AlgorithmIDTemplate)); + + params->maskAlg = (SECAlgorithmID *)PORT_ArenaZAlloc( + arena_.get(), sizeof(SECAlgorithmID)); + ASSERT_NE(nullptr, params->maskAlg); + + rv = SECOID_SetAlgorithmID(arena_.get(), params->maskAlg, + SEC_OID_PKCS1_MGF1, maskHashAlgItem); + ASSERT_EQ(SECSuccess, rv); + } + + void CreatePssParams(SECKEYRSAPSSParams *params, SECOidTag hashAlgTag, + SECOidTag maskHashAlgTag, unsigned long saltLength) { + CreatePssParams(params, hashAlgTag, maskHashAlgTag); + + SECItem *saltLengthItem = + SEC_ASN1EncodeInteger(arena_.get(), ¶ms->saltLength, saltLength); + ASSERT_EQ(¶ms->saltLength, saltLengthItem); + } + + void CheckHashAlg(SECKEYRSAPSSParams *params, SECOidTag hashAlgTag) { + // If hash algorithm is SHA-1, it must be omitted in the parameters + if (hashAlgTag == SEC_OID_SHA1) { + EXPECT_EQ(nullptr, params->hashAlg); + } else { + EXPECT_NE(nullptr, params->hashAlg); + EXPECT_EQ(hashAlgTag, SECOID_GetAlgorithmTag(params->hashAlg)); + } + } + + void CheckMaskAlg(SECKEYRSAPSSParams *params, SECOidTag hashAlgTag) { + SECStatus rv; + + // If hash algorithm is SHA-1, it must be omitted in the parameters + if (hashAlgTag == SEC_OID_SHA1) + EXPECT_EQ(nullptr, params->hashAlg); + else { + EXPECT_NE(nullptr, params->maskAlg); + EXPECT_EQ(SEC_OID_PKCS1_MGF1, SECOID_GetAlgorithmTag(params->maskAlg)); + + SECAlgorithmID hashAlg; + rv = SEC_QuickDERDecodeItem(arena_.get(), &hashAlg, + SEC_ASN1_GET(SECOID_AlgorithmIDTemplate), + ¶ms->maskAlg->parameters); + ASSERT_EQ(SECSuccess, rv); + + EXPECT_EQ(hashAlgTag, SECOID_GetAlgorithmTag(&hashAlg)); + } + } + + void CheckSaltLength(SECKEYRSAPSSParams *params, SECOidTag hashAlg) { + // If the salt length parameter is missing, that means it is 20 (default) + if (!params->saltLength.data) { + return; + } + + unsigned long value; + SECStatus rv = SEC_ASN1DecodeInteger(¶ms->saltLength, &value); + ASSERT_EQ(SECSuccess, rv); + + // The salt length are usually the same as the hash length, + // except for the case where the hash length exceeds the limit + // set by the key length + switch (hashAlg) { + case SEC_OID_SHA1: + EXPECT_EQ(20UL, value); + break; + case SEC_OID_SHA224: + EXPECT_EQ(28UL, value); + break; + case SEC_OID_SHA256: + EXPECT_EQ(32UL, value); + break; + case SEC_OID_SHA384: + EXPECT_EQ(48UL, value); + break; + case SEC_OID_SHA512: + // Truncated from 64, because our private key is 1024-bit + EXPECT_EQ(62UL, value); + break; + default: + FAIL(); + } + } +}; + +class SignParamsTest + : public SignParamsTestF, + public ::testing::WithParamInterface> {}; + +class SignParamsSourceTest : public SignParamsTestF, + public ::testing::WithParamInterface {}; + +TEST_P(SignParamsTest, CreateRsa) { + SECOidTag hashAlg = std::get<0>(GetParam()); + SECOidTag srcHashAlg = std::get<1>(GetParam()); + + SECItem *srcParams; + if (srcHashAlg != SEC_OID_UNKNOWN) { + SECKEYRSAPSSParams pssParams; + ASSERT_NO_FATAL_FAILURE( + CreatePssParams(&pssParams, srcHashAlg, srcHashAlg)); + srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams, + SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate)); + ASSERT_NE(nullptr, srcParams); + } else { + srcParams = NULL; + } + + SECItem *params = SEC_CreateSignatureAlgorithmParameters( + arena_.get(), nullptr, SEC_OID_PKCS1_RSA_ENCRYPTION, hashAlg, srcParams, + privk_.get()); + + // PKCS#1 RSA actually doesn't take any parameters, but if it is + // given, return a copy of it + if (srcHashAlg != SEC_OID_UNKNOWN) { + EXPECT_EQ(srcParams->len, params->len); + EXPECT_EQ(0, memcmp(params->data, srcParams->data, srcParams->len)); + } else { + EXPECT_EQ(nullptr, params); + } +} + +TEST_P(SignParamsTest, CreateRsaPss) { + SECOidTag hashAlg = std::get<0>(GetParam()); + SECOidTag srcHashAlg = std::get<1>(GetParam()); + + SECItem *srcParams; + if (srcHashAlg != SEC_OID_UNKNOWN) { + SECKEYRSAPSSParams pssParams; + ASSERT_NO_FATAL_FAILURE( + CreatePssParams(&pssParams, srcHashAlg, srcHashAlg)); + srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams, + SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate)); + ASSERT_NE(nullptr, srcParams); + } else { + srcParams = NULL; + } + + SECItem *params = SEC_CreateSignatureAlgorithmParameters( + arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg, + srcParams, privk_.get()); + + if (hashAlg != SEC_OID_UNKNOWN && srcHashAlg != SEC_OID_UNKNOWN && + hashAlg != srcHashAlg) { + EXPECT_EQ(nullptr, params); + return; + } + + EXPECT_NE(nullptr, params); + + SECKEYRSAPSSParams pssParams; + PORT_Memset(&pssParams, 0, sizeof(pssParams)); + SECStatus rv = + SEC_QuickDERDecodeItem(arena_.get(), &pssParams, + SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate), params); + ASSERT_EQ(SECSuccess, rv); + + if (hashAlg == SEC_OID_UNKNOWN) { + if (!pssParams.hashAlg) { + hashAlg = SEC_OID_SHA1; + } else { + hashAlg = SECOID_GetAlgorithmTag(pssParams.hashAlg); + } + + if (srcHashAlg == SEC_OID_UNKNOWN) { + // If both hashAlg and srcHashAlg is unset, NSS will decide the hash + // algorithm based on the key length; in this case it's SHA256 + EXPECT_EQ(SEC_OID_SHA256, hashAlg); + } else { + EXPECT_EQ(srcHashAlg, hashAlg); + } + } + + ASSERT_NO_FATAL_FAILURE(CheckHashAlg(&pssParams, hashAlg)); + ASSERT_NO_FATAL_FAILURE(CheckMaskAlg(&pssParams, hashAlg)); + ASSERT_NO_FATAL_FAILURE(CheckSaltLength(&pssParams, hashAlg)); + + // The default trailer field (1) must be omitted + EXPECT_EQ(nullptr, pssParams.trailerField.data); +} + +TEST_P(SignParamsTest, CreateRsaPssWithECPrivateKey) { + SECOidTag hashAlg = std::get<0>(GetParam()); + SECOidTag srcHashAlg = std::get<1>(GetParam()); + + SECItem *srcParams; + if (srcHashAlg != SEC_OID_UNKNOWN) { + SECKEYRSAPSSParams pssParams; + ASSERT_NO_FATAL_FAILURE( + CreatePssParams(&pssParams, srcHashAlg, srcHashAlg)); + srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams, + SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate)); + ASSERT_NE(nullptr, srcParams); + } else { + srcParams = NULL; + } + + SECItem *params = SEC_CreateSignatureAlgorithmParameters( + arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg, + srcParams, ecPrivk_.get()); + + EXPECT_EQ(nullptr, params); +} + +TEST_P(SignParamsTest, CreateRsaPssWithInvalidHashAlg) { + SECOidTag srcHashAlg = std::get<1>(GetParam()); + + SECItem *srcParams; + if (srcHashAlg != SEC_OID_UNKNOWN) { + SECKEYRSAPSSParams pssParams; + ASSERT_NO_FATAL_FAILURE( + CreatePssParams(&pssParams, srcHashAlg, srcHashAlg)); + srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams, + SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate)); + ASSERT_NE(nullptr, srcParams); + } else { + srcParams = NULL; + } + + SECItem *params = SEC_CreateSignatureAlgorithmParameters( + arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, SEC_OID_MD5, + srcParams, privk_.get()); + + EXPECT_EQ(nullptr, params); +} + +TEST_P(SignParamsSourceTest, CreateRsaPssWithInvalidHashAlg) { + SECOidTag hashAlg = GetParam(); + + SECItem *srcParams; + SECKEYRSAPSSParams pssParams; + ASSERT_NO_FATAL_FAILURE( + CreatePssParams(&pssParams, SEC_OID_MD5, SEC_OID_MD5)); + srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams, + SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate)); + ASSERT_NE(nullptr, srcParams); + + SECItem *params = SEC_CreateSignatureAlgorithmParameters( + arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg, + srcParams, privk_.get()); + + EXPECT_EQ(nullptr, params); +} + +TEST_P(SignParamsSourceTest, CreateRsaPssWithInvalidSaltLength) { + SECOidTag hashAlg = GetParam(); + + SECItem *srcParams; + SECKEYRSAPSSParams pssParams; + ASSERT_NO_FATAL_FAILURE( + CreatePssParams(&pssParams, SEC_OID_SHA512, SEC_OID_SHA512, 100)); + srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams, + SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate)); + ASSERT_NE(nullptr, srcParams); + + SECItem *params = SEC_CreateSignatureAlgorithmParameters( + arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg, + srcParams, privk_.get()); + + EXPECT_EQ(nullptr, params); +} + +TEST_P(SignParamsSourceTest, CreateRsaPssWithHashMismatch) { + SECOidTag hashAlg = GetParam(); + + SECItem *srcParams; + SECKEYRSAPSSParams pssParams; + ASSERT_NO_FATAL_FAILURE( + CreatePssParams(&pssParams, SEC_OID_SHA256, SEC_OID_SHA512)); + srcParams = SEC_ASN1EncodeItem(arena_.get(), nullptr, &pssParams, + SEC_ASN1_GET(SECKEY_RSAPSSParamsTemplate)); + ASSERT_NE(nullptr, srcParams); + + SECItem *params = SEC_CreateSignatureAlgorithmParameters( + arena_.get(), nullptr, SEC_OID_PKCS1_RSA_PSS_SIGNATURE, hashAlg, + srcParams, privk_.get()); + + EXPECT_EQ(nullptr, params); +} + +INSTANTIATE_TEST_CASE_P( + SignParamsTestCases, SignParamsTest, + ::testing::Combine(::testing::Values(SEC_OID_UNKNOWN, SEC_OID_SHA1, + SEC_OID_SHA224, SEC_OID_SHA256, + SEC_OID_SHA384, SEC_OID_SHA512), + ::testing::Values(SEC_OID_UNKNOWN, SEC_OID_SHA1, + SEC_OID_SHA224, SEC_OID_SHA256, + SEC_OID_SHA384, SEC_OID_SHA512))); + +INSTANTIATE_TEST_CASE_P(SignParamsSourceTestCases, SignParamsSourceTest, + ::testing::Values(SEC_OID_UNKNOWN, SEC_OID_SHA1, + SEC_OID_SHA224, SEC_OID_SHA256, + SEC_OID_SHA384, SEC_OID_SHA512)); + +} // namespace nss_test diff --git a/security/nss/gtests/cryptohi_gtest/manifest.mn b/security/nss/gtests/cryptohi_gtest/manifest.mn new file mode 100644 index 000000000000..644463aa6a3e --- /dev/null +++ b/security/nss/gtests/cryptohi_gtest/manifest.mn @@ -0,0 +1,22 @@ +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +CORE_DEPTH = ../.. +DEPTH = ../.. +MODULE = nss + +CPPSRCS = \ + cryptohi_unittest.cc \ + $(NULL) + +INCLUDES += -I$(CORE_DEPTH)/gtests/google_test/gtest/include \ + -I$(CORE_DEPTH)/gtests/common \ + -I$(CORE_DEPTH)/cpputil + +REQUIRES = nspr gtest + +PROGRAM = cryptohi_gtest + +EXTRA_LIBS = $(DIST)/lib/$(LIB_PREFIX)gtest.$(LIB_SUFFIX) $(EXTRA_OBJS) \ + $(DIST)/lib/$(LIB_PREFIX)gtestutil.$(LIB_SUFFIX) diff --git a/security/nss/gtests/manifest.mn b/security/nss/gtests/manifest.mn index a435f8733c8e..13048f037cf5 100644 --- a/security/nss/gtests/manifest.mn +++ b/security/nss/gtests/manifest.mn @@ -21,6 +21,7 @@ ifneq ($(NSS_BUILD_UTIL_ONLY),1) NSS_SRCDIRS = \ certdb_gtest \ certhigh_gtest \ + cryptohi_gtest \ der_gtest \ pk11_gtest \ softoken_gtest \ diff --git a/security/nss/gtests/pk11_gtest/manifest.mn b/security/nss/gtests/pk11_gtest/manifest.mn index fb773ee18e17..509235fc5e2b 100644 --- a/security/nss/gtests/pk11_gtest/manifest.mn +++ b/security/nss/gtests/pk11_gtest/manifest.mn @@ -23,10 +23,12 @@ INCLUDES += -I$(CORE_DEPTH)/gtests/google_test/gtest/include \ -I$(CORE_DEPTH)/gtests/common \ -I$(CORE_DEPTH)/cpputil -REQUIRES = nspr nss libdbm gtest +REQUIRES = nspr nss libdbm gtest cpputil PROGRAM = pk11_gtest -EXTRA_LIBS = $(DIST)/lib/$(LIB_PREFIX)gtest.$(LIB_SUFFIX) $(EXTRA_OBJS) \ - $(DIST)/lib/$(LIB_PREFIX)gtestutil.$(LIB_SUFFIX) +EXTRA_LIBS = $(DIST)/lib/$(LIB_PREFIX)gtest.$(LIB_SUFFIX) \ + $(DIST)/lib/$(LIB_PREFIX)cpputil.$(LIB_SUFFIX) \ + $(DIST)/lib/$(LIB_PREFIX)gtestutil.$(LIB_SUFFIX) \ + $(NULL) diff --git a/security/nss/gtests/pk11_gtest/pk11_gtest.gyp b/security/nss/gtests/pk11_gtest/pk11_gtest.gyp index c47ff4778562..88b86c55df9b 100644 --- a/security/nss/gtests/pk11_gtest/pk11_gtest.gyp +++ b/security/nss/gtests/pk11_gtest/pk11_gtest.gyp @@ -26,6 +26,7 @@ 'dependencies': [ '<(DEPTH)/exports.gyp:nss_exports', '<(DEPTH)/lib/util/util.gyp:nssutil3', + '<(DEPTH)/cpputil/cpputil.gyp:cpputil', '<(DEPTH)/gtests/google_test/google_test.gyp:gtest', ], 'conditions': [ diff --git a/security/nss/gtests/ssl_gtest/ssl_auth_unittest.cc b/security/nss/gtests/ssl_gtest/ssl_auth_unittest.cc index dbcbc9aa3359..ccff03fe838c 100644 --- a/security/nss/gtests/ssl_gtest/ssl_auth_unittest.cc +++ b/security/nss/gtests/ssl_gtest/ssl_auth_unittest.cc @@ -29,7 +29,25 @@ TEST_P(TlsConnectGeneric, ServerAuthBigRsa) { } TEST_P(TlsConnectGeneric, ServerAuthRsaChain) { - Reset(TlsAgent::kServerRsaChain); + Reset("rsa_chain"); + Connect(); + CheckKeys(); + size_t chain_length; + EXPECT_TRUE(client_->GetPeerChainLength(&chain_length)); + EXPECT_EQ(2UL, chain_length); +} + +TEST_P(TlsConnectGeneric, ServerAuthRsaPssChain) { + Reset("rsa_pss_chain"); + Connect(); + CheckKeys(); + size_t chain_length; + EXPECT_TRUE(client_->GetPeerChainLength(&chain_length)); + EXPECT_EQ(2UL, chain_length); +} + +TEST_P(TlsConnectGeneric, ServerAuthRsaCARsaPssChain) { + Reset("rsa_ca_rsa_pss_chain"); Connect(); CheckKeys(); size_t chain_length; diff --git a/security/nss/gtests/ssl_gtest/ssl_gtest.cc b/security/nss/gtests/ssl_gtest/ssl_gtest.cc index cd10076b8da2..2fff9d7cbbe5 100644 --- a/security/nss/gtests/ssl_gtest/ssl_gtest.cc +++ b/security/nss/gtests/ssl_gtest/ssl_gtest.cc @@ -6,6 +6,7 @@ #include #include "test_io.h" +#include "databuffer.h" #define GTEST_HAS_RTTI 0 #include "gtest/gtest.h" @@ -28,6 +29,7 @@ int main(int argc, char** argv) { ++i; } else if (!strcmp(argv[i], "-v")) { g_ssl_gtest_verbose = true; + nss_test::DataBuffer::SetLogLimit(16384); } } diff --git a/security/nss/gtests/ssl_gtest/ssl_keylog_unittest.cc b/security/nss/gtests/ssl_gtest/ssl_keylog_unittest.cc index 33eb1dac0a21..c390e16d7d71 100644 --- a/security/nss/gtests/ssl_gtest/ssl_keylog_unittest.cc +++ b/security/nss/gtests/ssl_gtest/ssl_keylog_unittest.cc @@ -19,7 +19,8 @@ class KeyLogFileTest : public TlsConnectGeneric { public: void SetUp() { TlsConnectTestBase::SetUp(); - remove(keylog_file_path.c_str()); + // Remove previous results (if any). + (void)remove(keylog_file_path.c_str()); std::ostringstream sstr; sstr << "SSLKEYLOGFILE=" << keylog_file_path; PR_SetEnv(sstr.str().c_str()); diff --git a/security/nss/gtests/ssl_gtest/tls_agent.cc b/security/nss/gtests/ssl_gtest/tls_agent.cc index 2809d138a040..e84ffc20364a 100644 --- a/security/nss/gtests/ssl_gtest/tls_agent.cc +++ b/security/nss/gtests/ssl_gtest/tls_agent.cc @@ -36,7 +36,6 @@ const std::string TlsAgent::kServerRsa = "rsa"; // both sign and encrypt const std::string TlsAgent::kServerRsaSign = "rsa_sign"; const std::string TlsAgent::kServerRsaPss = "rsa_pss"; const std::string TlsAgent::kServerRsaDecrypt = "rsa_decrypt"; -const std::string TlsAgent::kServerRsaChain = "rsa_chain"; const std::string TlsAgent::kServerEcdsa256 = "ecdsa256"; const std::string TlsAgent::kServerEcdsa384 = "ecdsa384"; const std::string TlsAgent::kServerEcdsa521 = "ecdsa521"; diff --git a/security/nss/gtests/ssl_gtest/tls_agent.h b/security/nss/gtests/ssl_gtest/tls_agent.h index 9344ce0693e6..2baffbd7fd4b 100644 --- a/security/nss/gtests/ssl_gtest/tls_agent.h +++ b/security/nss/gtests/ssl_gtest/tls_agent.h @@ -66,7 +66,6 @@ class TlsAgent : public PollTarget { static const std::string kServerRsaSign; static const std::string kServerRsaPss; static const std::string kServerRsaDecrypt; - static const std::string kServerRsaChain; // A cert that requires a chain. static const std::string kServerEcdsa256; static const std::string kServerEcdsa384; static const std::string kServerEcdsa521; diff --git a/security/nss/lib/certdb/certdb.c b/security/nss/lib/certdb/certdb.c index 7864edc08e4a..1a676a720780 100644 --- a/security/nss/lib/certdb/certdb.c +++ b/security/nss/lib/certdb/certdb.c @@ -1192,6 +1192,7 @@ CERT_CheckKeyUsage(CERTCertificate *cert, unsigned int requiredUsage) case rsaKey: requiredUsage |= KU_KEY_ENCIPHERMENT; break; + case rsaPssKey: case dsaKey: requiredUsage |= KU_DIGITAL_SIGNATURE; break; diff --git a/security/nss/lib/ckfw/builtins/certdata.txt b/security/nss/lib/ckfw/builtins/certdata.txt index 45b659b7aa26..d7e6da6aa1d5 100644 --- a/security/nss/lib/ckfw/builtins/certdata.txt +++ b/security/nss/lib/ckfw/builtins/certdata.txt @@ -2312,125 +2312,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Certum Root CA" -# -# Issuer: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL -# Serial Number: 65568 (0x10020) -# Subject: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL -# Not Valid Before: Tue Jun 11 10:46:39 2002 -# Not Valid After : Fri Jun 11 10:46:39 2027 -# Fingerprint (MD5): 2C:8F:9F:66:1D:18:90:B1:47:26:9D:8E:86:82:8C:A9 -# Fingerprint (SHA1): 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certum Root CA" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\076\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\033\060\031\006\003\125\004\012\023\022\125\156\151\172\145\164 -\157\040\123\160\056\040\172\040\157\056\157\056\061\022\060\020 -\006\003\125\004\003\023\011\103\145\162\164\165\155\040\103\101 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\076\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\033\060\031\006\003\125\004\012\023\022\125\156\151\172\145\164 -\157\040\123\160\056\040\172\040\157\056\157\056\061\022\060\020 -\006\003\125\004\003\023\011\103\145\162\164\165\155\040\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\003\001\000\040 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\014\060\202\001\364\240\003\002\001\002\002\003\001 -\000\040\060\015\006\011\052\206\110\206\367\015\001\001\005\005 -\000\060\076\061\013\060\011\006\003\125\004\006\023\002\120\114 -\061\033\060\031\006\003\125\004\012\023\022\125\156\151\172\145 -\164\157\040\123\160\056\040\172\040\157\056\157\056\061\022\060 -\020\006\003\125\004\003\023\011\103\145\162\164\165\155\040\103 -\101\060\036\027\015\060\062\060\066\061\061\061\060\064\066\063 -\071\132\027\015\062\067\060\066\061\061\061\060\064\066\063\071 -\132\060\076\061\013\060\011\006\003\125\004\006\023\002\120\114 -\061\033\060\031\006\003\125\004\012\023\022\125\156\151\172\145 -\164\157\040\123\160\056\040\172\040\157\056\157\056\061\022\060 -\020\006\003\125\004\003\023\011\103\145\162\164\165\155\040\103 -\101\060\202\001\042\060\015\006\011\052\206\110\206\367\015\001 -\001\001\005\000\003\202\001\017\000\060\202\001\012\002\202\001 -\001\000\316\261\301\056\323\117\174\315\045\316\030\076\117\304 -\214\157\200\152\163\310\133\121\370\233\322\334\273\000\134\261 -\240\374\165\003\356\201\360\210\356\043\122\351\346\025\063\215 -\254\055\011\305\166\371\053\071\200\211\344\227\113\220\245\250 -\170\370\163\103\173\244\141\260\330\130\314\341\154\146\176\234 -\363\011\136\125\143\204\325\250\357\363\261\056\060\150\263\304 -\074\330\254\156\215\231\132\220\116\064\334\066\232\217\201\210 -\120\267\155\226\102\011\363\327\225\203\015\101\113\260\152\153 -\370\374\017\176\142\237\147\304\355\046\137\020\046\017\010\117 -\360\244\127\050\316\217\270\355\105\366\156\356\045\135\252\156 -\071\276\344\223\057\331\107\240\162\353\372\246\133\257\312\123 -\077\342\016\306\226\126\021\156\367\351\146\251\046\330\177\225 -\123\355\012\205\210\272\117\051\245\102\214\136\266\374\205\040 -\000\252\150\013\241\032\205\001\234\304\106\143\202\210\266\042 -\261\356\376\252\106\131\176\317\065\054\325\266\332\135\367\110 -\063\024\124\266\353\331\157\316\315\210\326\253\033\332\226\073 -\035\131\002\003\001\000\001\243\023\060\021\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\015\006\011 -\052\206\110\206\367\015\001\001\005\005\000\003\202\001\001\000 -\270\215\316\357\347\024\272\317\356\260\104\222\154\264\071\076 -\242\204\156\255\270\041\167\322\324\167\202\207\346\040\101\201 -\356\342\370\021\267\143\321\027\067\276\031\166\044\034\004\032 -\114\353\075\252\147\157\055\324\315\376\145\061\160\305\033\246 -\002\012\272\140\173\155\130\302\232\111\376\143\062\013\153\343 -\072\300\254\253\073\260\350\323\011\121\214\020\203\306\064\340 -\305\053\340\032\266\140\024\047\154\062\167\214\274\262\162\230 -\317\315\314\077\271\310\044\102\024\326\127\374\346\046\103\251 -\035\345\200\220\316\003\124\050\076\367\077\323\370\115\355\152 -\012\072\223\023\233\073\024\043\023\143\234\077\321\207\047\171 -\345\114\121\343\001\255\205\135\032\073\261\325\163\020\244\323 -\362\274\156\144\365\132\126\220\250\307\016\114\164\017\056\161 -\073\367\310\107\364\151\157\025\362\021\136\203\036\234\174\122 -\256\375\002\332\022\250\131\147\030\333\274\160\335\233\261\151 -\355\200\316\211\100\110\152\016\065\312\051\146\025\041\224\054 -\350\140\052\233\205\112\100\363\153\212\044\354\006\026\054\163 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for Certificate "Certum Root CA" -# Issuer: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL -# Serial Number: 65568 (0x10020) -# Subject: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL -# Not Valid Before: Tue Jun 11 10:46:39 2002 -# Not Valid After : Fri Jun 11 10:46:39 2027 -# Fingerprint (MD5): 2C:8F:9F:66:1D:18:90:B1:47:26:9D:8E:86:82:8C:A9 -# Fingerprint (SHA1): 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certum Root CA" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\142\122\334\100\367\021\103\242\057\336\236\367\064\216\006\102 -\121\261\201\030 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\054\217\237\146\035\030\220\261\107\046\235\216\206\202\214\251 -END -CKA_ISSUER MULTILINE_OCTAL -\060\076\061\013\060\011\006\003\125\004\006\023\002\120\114\061 -\033\060\031\006\003\125\004\012\023\022\125\156\151\172\145\164 -\157\040\123\160\056\040\172\040\157\056\157\056\061\022\060\020 -\006\003\125\004\003\023\011\103\145\162\164\165\155\040\103\101 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\003\001\000\040 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "Comodo AAA Services root" # @@ -4292,213 +4173,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "StartCom Certification Authority" -# -# Issuer: CN=StartCom Certification Authority,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL -# Serial Number: 1 (0x1) -# Subject: CN=StartCom Certification Authority,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL -# Not Valid Before: Sun Sep 17 19:46:36 2006 -# Not Valid After : Wed Sep 17 19:46:36 2036 -# Fingerprint (MD5): 22:4D:8F:8A:FC:F7:35:C2:BB:57:34:90:7B:8B:22:16 -# Fingerprint (SHA1): 3E:2B:F7:F2:03:1B:96:F3:8C:E6:C4:D8:A8:5D:3E:2D:58:47:6A:0F -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "StartCom Certification Authority" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\053\060\051\006\003\125\004\013 -\023\042\123\145\143\165\162\145\040\104\151\147\151\164\141\154 -\040\103\145\162\164\151\146\151\143\141\164\145\040\123\151\147 -\156\151\156\147\061\051\060\047\006\003\125\004\003\023\040\123 -\164\141\162\164\103\157\155\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\053\060\051\006\003\125\004\013 -\023\042\123\145\143\165\162\145\040\104\151\147\151\164\141\154 -\040\103\145\162\164\151\146\151\143\141\164\145\040\123\151\147 -\156\151\156\147\061\051\060\047\006\003\125\004\003\023\040\123 -\164\141\162\164\103\157\155\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\007\311\060\202\005\261\240\003\002\001\002\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\175\061\013\060\011\006\003\125\004\006\023\002\111\114\061\026 -\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103\157 -\155\040\114\164\144\056\061\053\060\051\006\003\125\004\013\023 -\042\123\145\143\165\162\145\040\104\151\147\151\164\141\154\040 -\103\145\162\164\151\146\151\143\141\164\145\040\123\151\147\156 -\151\156\147\061\051\060\047\006\003\125\004\003\023\040\123\164 -\141\162\164\103\157\155\040\103\145\162\164\151\146\151\143\141 -\164\151\157\156\040\101\165\164\150\157\162\151\164\171\060\036 -\027\015\060\066\060\071\061\067\061\071\064\066\063\066\132\027 -\015\063\066\060\071\061\067\061\071\064\066\063\066\132\060\175 -\061\013\060\011\006\003\125\004\006\023\002\111\114\061\026\060 -\024\006\003\125\004\012\023\015\123\164\141\162\164\103\157\155 -\040\114\164\144\056\061\053\060\051\006\003\125\004\013\023\042 -\123\145\143\165\162\145\040\104\151\147\151\164\141\154\040\103 -\145\162\164\151\146\151\143\141\164\145\040\123\151\147\156\151 -\156\147\061\051\060\047\006\003\125\004\003\023\040\123\164\141 -\162\164\103\157\155\040\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\060\202\002 -\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 -\003\202\002\017\000\060\202\002\012\002\202\002\001\000\301\210 -\333\011\274\154\106\174\170\237\225\173\265\063\220\362\162\142 -\326\301\066\040\042\044\136\316\351\167\362\103\012\242\006\144 -\244\314\216\066\370\070\346\043\360\156\155\261\074\335\162\243 -\205\034\241\323\075\264\063\053\323\057\257\376\352\260\101\131 -\147\266\304\006\175\012\236\164\205\326\171\114\200\067\172\337 -\071\005\122\131\367\364\033\106\103\244\322\205\205\322\303\161 -\363\165\142\064\272\054\212\177\036\217\356\355\064\320\021\307 -\226\315\122\075\272\063\326\335\115\336\013\073\112\113\237\302 -\046\057\372\265\026\034\162\065\167\312\074\135\346\312\341\046 -\213\032\066\166\134\001\333\164\024\045\376\355\265\240\210\017 -\335\170\312\055\037\007\227\060\001\055\162\171\372\106\326\023 -\052\250\271\246\253\203\111\035\345\362\357\335\344\001\216\030 -\012\217\143\123\026\205\142\251\016\031\072\314\265\146\246\302 -\153\164\007\344\053\341\166\076\264\155\330\366\104\341\163\142 -\037\073\304\276\240\123\126\045\154\121\011\367\252\253\312\277 -\166\375\155\233\363\235\333\277\075\146\274\014\126\252\257\230 -\110\225\072\113\337\247\130\120\331\070\165\251\133\352\103\014 -\002\377\231\353\350\154\115\160\133\051\145\234\335\252\135\314 -\257\001\061\354\014\353\322\215\350\352\234\173\346\156\367\047 -\146\014\032\110\327\156\102\343\077\336\041\076\173\341\015\160 -\373\143\252\250\154\032\124\264\134\045\172\311\242\311\213\026 -\246\273\054\176\027\136\005\115\130\156\022\035\001\356\022\020 -\015\306\062\177\030\377\374\364\372\315\156\221\350\066\111\276 -\032\110\151\213\302\226\115\032\022\262\151\027\301\012\220\326 -\372\171\042\110\277\272\173\151\370\160\307\372\172\067\330\330 -\015\322\166\117\127\377\220\267\343\221\322\335\357\302\140\267 -\147\072\335\376\252\234\360\324\213\177\162\042\316\306\237\227 -\266\370\257\212\240\020\250\331\373\030\306\266\265\134\122\074 -\211\266\031\052\163\001\012\017\003\263\022\140\362\172\057\201 -\333\243\156\377\046\060\227\365\213\335\211\127\266\255\075\263 -\257\053\305\267\166\002\360\245\326\053\232\206\024\052\162\366 -\343\063\214\135\011\113\023\337\273\214\164\023\122\113\002\003 -\001\000\001\243\202\002\122\060\202\002\116\060\014\006\003\125 -\035\023\004\005\060\003\001\001\377\060\013\006\003\125\035\017 -\004\004\003\002\001\256\060\035\006\003\125\035\016\004\026\004 -\024\116\013\357\032\244\100\133\245\027\151\207\060\312\064\150 -\103\320\101\256\362\060\144\006\003\125\035\037\004\135\060\133 -\060\054\240\052\240\050\206\046\150\164\164\160\072\057\057\143 -\145\162\164\056\163\164\141\162\164\143\157\155\056\157\162\147 -\057\163\146\163\143\141\055\143\162\154\056\143\162\154\060\053 -\240\051\240\047\206\045\150\164\164\160\072\057\057\143\162\154 -\056\163\164\141\162\164\143\157\155\056\157\162\147\057\163\146 -\163\143\141\055\143\162\154\056\143\162\154\060\202\001\135\006 -\003\125\035\040\004\202\001\124\060\202\001\120\060\202\001\114 -\006\013\053\006\001\004\001\201\265\067\001\001\001\060\202\001 -\073\060\057\006\010\053\006\001\005\005\007\002\001\026\043\150 -\164\164\160\072\057\057\143\145\162\164\056\163\164\141\162\164 -\143\157\155\056\157\162\147\057\160\157\154\151\143\171\056\160 -\144\146\060\065\006\010\053\006\001\005\005\007\002\001\026\051 -\150\164\164\160\072\057\057\143\145\162\164\056\163\164\141\162 -\164\143\157\155\056\157\162\147\057\151\156\164\145\162\155\145 -\144\151\141\164\145\056\160\144\146\060\201\320\006\010\053\006 -\001\005\005\007\002\002\060\201\303\060\047\026\040\123\164\141 -\162\164\040\103\157\155\155\145\162\143\151\141\154\040\050\123 -\164\141\162\164\103\157\155\051\040\114\164\144\056\060\003\002 -\001\001\032\201\227\114\151\155\151\164\145\144\040\114\151\141 -\142\151\154\151\164\171\054\040\162\145\141\144\040\164\150\145 -\040\163\145\143\164\151\157\156\040\052\114\145\147\141\154\040 -\114\151\155\151\164\141\164\151\157\156\163\052\040\157\146\040 -\164\150\145\040\123\164\141\162\164\103\157\155\040\103\145\162 -\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 -\162\151\164\171\040\120\157\154\151\143\171\040\141\166\141\151 -\154\141\142\154\145\040\141\164\040\150\164\164\160\072\057\057 -\143\145\162\164\056\163\164\141\162\164\143\157\155\056\157\162 -\147\057\160\157\154\151\143\171\056\160\144\146\060\021\006\011 -\140\206\110\001\206\370\102\001\001\004\004\003\002\000\007\060 -\070\006\011\140\206\110\001\206\370\102\001\015\004\053\026\051 -\123\164\141\162\164\103\157\155\040\106\162\145\145\040\123\123 -\114\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040 -\101\165\164\150\157\162\151\164\171\060\015\006\011\052\206\110 -\206\367\015\001\001\005\005\000\003\202\002\001\000\026\154\231 -\364\146\014\064\365\320\205\136\175\012\354\332\020\116\070\034 -\136\337\246\045\005\113\221\062\301\350\073\361\075\335\104\011 -\133\007\111\212\051\313\146\002\267\261\232\367\045\230\011\074 -\216\033\341\335\066\207\053\113\273\150\323\071\146\075\240\046 -\307\362\071\221\035\121\253\202\173\176\325\316\132\344\342\003 -\127\160\151\227\010\371\136\130\246\012\337\214\006\232\105\026 -\026\070\012\136\127\366\142\307\172\002\005\346\274\036\265\362 -\236\364\251\051\203\370\262\024\343\156\050\207\104\303\220\032 -\336\070\251\074\254\103\115\144\105\316\335\050\251\134\362\163 -\173\004\370\027\350\253\261\363\056\134\144\156\163\061\072\022 -\270\274\263\021\344\175\217\201\121\232\073\215\211\364\115\223 -\146\173\074\003\355\323\232\035\232\363\145\120\365\240\320\165 -\237\057\257\360\352\202\103\230\370\151\234\211\171\304\103\216 -\106\162\343\144\066\022\257\367\045\036\070\211\220\167\176\303 -\153\152\271\303\313\104\113\254\170\220\213\347\307\054\036\113 -\021\104\310\064\122\047\315\012\135\237\205\301\211\325\032\170 -\362\225\020\123\062\335\200\204\146\165\331\265\150\050\373\141 -\056\276\204\250\070\300\231\022\206\245\036\147\144\255\006\056 -\057\251\160\205\307\226\017\174\211\145\365\216\103\124\016\253 -\335\245\200\071\224\140\300\064\311\226\160\054\243\022\365\037 -\110\173\275\034\176\153\267\235\220\364\042\073\256\370\374\052 -\312\372\202\122\240\357\257\113\125\223\353\301\265\360\042\213 -\254\064\116\046\042\004\241\207\054\165\112\267\345\175\023\327 -\270\014\144\300\066\322\311\057\206\022\214\043\011\301\033\202 -\073\163\111\243\152\127\207\224\345\326\170\305\231\103\143\343 -\115\340\167\055\341\145\231\162\151\004\032\107\011\346\017\001 -\126\044\373\037\277\016\171\251\130\056\271\304\011\001\176\225 -\272\155\000\006\076\262\352\112\020\071\330\320\053\365\277\354 -\165\277\227\002\305\011\033\010\334\125\067\342\201\373\067\204 -\103\142\040\312\347\126\113\145\352\376\154\301\044\223\044\241 -\064\353\005\377\232\042\256\233\175\077\361\145\121\012\246\060 -\152\263\364\210\034\200\015\374\162\212\350\203\136 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for Certificate "StartCom Certification Authority" -# Issuer: CN=StartCom Certification Authority,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL -# Serial Number: 1 (0x1) -# Subject: CN=StartCom Certification Authority,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL -# Not Valid Before: Sun Sep 17 19:46:36 2006 -# Not Valid After : Wed Sep 17 19:46:36 2036 -# Fingerprint (MD5): 22:4D:8F:8A:FC:F7:35:C2:BB:57:34:90:7B:8B:22:16 -# Fingerprint (SHA1): 3E:2B:F7:F2:03:1B:96:F3:8C:E6:C4:D8:A8:5D:3E:2D:58:47:6A:0F -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "StartCom Certification Authority" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\076\053\367\362\003\033\226\363\214\346\304\330\250\135\076\055 -\130\107\152\017 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\042\115\217\212\374\367\065\302\273\127\064\220\173\213\042\026 -END -CKA_ISSUER MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\053\060\051\006\003\125\004\013 -\023\042\123\145\143\165\162\145\040\104\151\147\151\164\141\154 -\040\103\145\162\164\151\146\151\143\141\164\145\040\123\151\147 -\156\151\156\147\061\051\060\047\006\003\125\004\003\023\040\123 -\164\141\162\164\103\157\155\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "Taiwan GRCA" # @@ -8650,203 +8324,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "TUBITAK UEKAE Kok Sertifika Hizmet Saglayicisi - Surum 3" -# -# Issuer: CN=T..B..TAK UEKAE K..k Sertifika Hizmet Sa..lay..c..s.. - S..r..m ...,OU=Kamu Sertifikasyon Merkezi,OU=Ulusal Elektronik ve Kriptoloji Ara..t..rma Enstit..s.. - UEKAE,O=T..rkiye Bilimsel ve Teknolojik Ara..t..rma Kurumu - T..B..TAK,L=Gebze - Kocaeli,C=TR -# Serial Number: 17 (0x11) -# Subject: CN=T..B..TAK UEKAE K..k Sertifika Hizmet Sa..lay..c..s.. - S..r..m ...,OU=Kamu Sertifikasyon Merkezi,OU=Ulusal Elektronik ve Kriptoloji Ara..t..rma Enstit..s.. - UEKAE,O=T..rkiye Bilimsel ve Teknolojik Ara..t..rma Kurumu - T..B..TAK,L=Gebze - Kocaeli,C=TR -# Not Valid Before: Fri Aug 24 11:37:07 2007 -# Not Valid After : Mon Aug 21 11:37:07 2017 -# Fingerprint (MD5): ED:41:F5:8C:50:C5:2B:9C:73:E6:EE:6C:EB:C2:A8:26 -# Fingerprint (SHA1): 1B:4B:39:61:26:27:6B:64:91:A2:68:6D:D7:02:43:21:2D:1F:1D:96 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\202\001\053\061\013\060\011\006\003\125\004\006\023\002\124 -\122\061\030\060\026\006\003\125\004\007\014\017\107\145\142\172 -\145\040\055\040\113\157\143\141\145\154\151\061\107\060\105\006 -\003\125\004\012\014\076\124\303\274\162\153\151\171\145\040\102 -\151\154\151\155\163\145\154\040\166\145\040\124\145\153\156\157 -\154\157\152\151\153\040\101\162\141\305\237\164\304\261\162\155 -\141\040\113\165\162\165\155\165\040\055\040\124\303\234\102\304 -\260\124\101\113\061\110\060\106\006\003\125\004\013\014\077\125 -\154\165\163\141\154\040\105\154\145\153\164\162\157\156\151\153 -\040\166\145\040\113\162\151\160\164\157\154\157\152\151\040\101 -\162\141\305\237\164\304\261\162\155\141\040\105\156\163\164\151 -\164\303\274\163\303\274\040\055\040\125\105\113\101\105\061\043 -\060\041\006\003\125\004\013\014\032\113\141\155\165\040\123\145 -\162\164\151\146\151\153\141\163\171\157\156\040\115\145\162\153 -\145\172\151\061\112\060\110\006\003\125\004\003\014\101\124\303 -\234\102\304\260\124\101\113\040\125\105\113\101\105\040\113\303 -\266\153\040\123\145\162\164\151\146\151\153\141\040\110\151\172 -\155\145\164\040\123\141\304\237\154\141\171\304\261\143\304\261 -\163\304\261\040\055\040\123\303\274\162\303\274\155\040\063 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\202\001\053\061\013\060\011\006\003\125\004\006\023\002\124 -\122\061\030\060\026\006\003\125\004\007\014\017\107\145\142\172 -\145\040\055\040\113\157\143\141\145\154\151\061\107\060\105\006 -\003\125\004\012\014\076\124\303\274\162\153\151\171\145\040\102 -\151\154\151\155\163\145\154\040\166\145\040\124\145\153\156\157 -\154\157\152\151\153\040\101\162\141\305\237\164\304\261\162\155 -\141\040\113\165\162\165\155\165\040\055\040\124\303\234\102\304 -\260\124\101\113\061\110\060\106\006\003\125\004\013\014\077\125 -\154\165\163\141\154\040\105\154\145\153\164\162\157\156\151\153 -\040\166\145\040\113\162\151\160\164\157\154\157\152\151\040\101 -\162\141\305\237\164\304\261\162\155\141\040\105\156\163\164\151 -\164\303\274\163\303\274\040\055\040\125\105\113\101\105\061\043 -\060\041\006\003\125\004\013\014\032\113\141\155\165\040\123\145 -\162\164\151\146\151\153\141\163\171\157\156\040\115\145\162\153 -\145\172\151\061\112\060\110\006\003\125\004\003\014\101\124\303 -\234\102\304\260\124\101\113\040\125\105\113\101\105\040\113\303 -\266\153\040\123\145\162\164\151\146\151\153\141\040\110\151\172 -\155\145\164\040\123\141\304\237\154\141\171\304\261\143\304\261 -\163\304\261\040\055\040\123\303\274\162\303\274\155\040\063 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\021 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\027\060\202\003\377\240\003\002\001\002\002\001\021 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\202\001\053\061\013\060\011\006\003\125\004\006\023\002\124\122 -\061\030\060\026\006\003\125\004\007\014\017\107\145\142\172\145 -\040\055\040\113\157\143\141\145\154\151\061\107\060\105\006\003 -\125\004\012\014\076\124\303\274\162\153\151\171\145\040\102\151 -\154\151\155\163\145\154\040\166\145\040\124\145\153\156\157\154 -\157\152\151\153\040\101\162\141\305\237\164\304\261\162\155\141 -\040\113\165\162\165\155\165\040\055\040\124\303\234\102\304\260 -\124\101\113\061\110\060\106\006\003\125\004\013\014\077\125\154 -\165\163\141\154\040\105\154\145\153\164\162\157\156\151\153\040 -\166\145\040\113\162\151\160\164\157\154\157\152\151\040\101\162 -\141\305\237\164\304\261\162\155\141\040\105\156\163\164\151\164 -\303\274\163\303\274\040\055\040\125\105\113\101\105\061\043\060 -\041\006\003\125\004\013\014\032\113\141\155\165\040\123\145\162 -\164\151\146\151\153\141\163\171\157\156\040\115\145\162\153\145 -\172\151\061\112\060\110\006\003\125\004\003\014\101\124\303\234 -\102\304\260\124\101\113\040\125\105\113\101\105\040\113\303\266 -\153\040\123\145\162\164\151\146\151\153\141\040\110\151\172\155 -\145\164\040\123\141\304\237\154\141\171\304\261\143\304\261\163 -\304\261\040\055\040\123\303\274\162\303\274\155\040\063\060\036 -\027\015\060\067\060\070\062\064\061\061\063\067\060\067\132\027 -\015\061\067\060\070\062\061\061\061\063\067\060\067\132\060\202 -\001\053\061\013\060\011\006\003\125\004\006\023\002\124\122\061 -\030\060\026\006\003\125\004\007\014\017\107\145\142\172\145\040 -\055\040\113\157\143\141\145\154\151\061\107\060\105\006\003\125 -\004\012\014\076\124\303\274\162\153\151\171\145\040\102\151\154 -\151\155\163\145\154\040\166\145\040\124\145\153\156\157\154\157 -\152\151\153\040\101\162\141\305\237\164\304\261\162\155\141\040 -\113\165\162\165\155\165\040\055\040\124\303\234\102\304\260\124 -\101\113\061\110\060\106\006\003\125\004\013\014\077\125\154\165 -\163\141\154\040\105\154\145\153\164\162\157\156\151\153\040\166 -\145\040\113\162\151\160\164\157\154\157\152\151\040\101\162\141 -\305\237\164\304\261\162\155\141\040\105\156\163\164\151\164\303 -\274\163\303\274\040\055\040\125\105\113\101\105\061\043\060\041 -\006\003\125\004\013\014\032\113\141\155\165\040\123\145\162\164 -\151\146\151\153\141\163\171\157\156\040\115\145\162\153\145\172 -\151\061\112\060\110\006\003\125\004\003\014\101\124\303\234\102 -\304\260\124\101\113\040\125\105\113\101\105\040\113\303\266\153 -\040\123\145\162\164\151\146\151\153\141\040\110\151\172\155\145 -\164\040\123\141\304\237\154\141\171\304\261\143\304\261\163\304 -\261\040\055\040\123\303\274\162\303\274\155\040\063\060\202\001 -\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 -\003\202\001\017\000\060\202\001\012\002\202\001\001\000\212\155 -\113\377\020\210\072\303\366\176\224\350\352\040\144\160\256\041 -\201\276\072\173\074\333\361\035\122\177\131\372\363\042\114\225 -\240\220\274\110\116\021\253\373\267\265\215\172\203\050\214\046 -\106\330\116\225\100\207\141\237\305\236\155\201\207\127\154\212 -\073\264\146\352\314\100\374\343\252\154\262\313\001\333\062\277 -\322\353\205\317\241\015\125\303\133\070\127\160\270\165\306\171 -\321\024\060\355\033\130\133\153\357\065\362\241\041\116\305\316 -\174\231\137\154\271\270\042\223\120\247\315\114\160\152\276\152 -\005\177\023\234\053\036\352\376\107\316\004\245\157\254\223\056 -\174\053\237\236\171\023\221\350\352\236\312\070\165\216\142\260 -\225\223\052\345\337\351\136\227\156\040\137\137\204\172\104\071 -\031\100\034\272\125\053\373\060\262\201\357\204\343\334\354\230 -\070\071\003\205\010\251\124\003\005\051\360\311\217\213\352\013 -\206\145\031\021\323\351\011\043\336\150\223\003\311\066\034\041 -\156\316\214\146\361\231\060\330\327\263\303\035\370\201\056\250 -\275\202\013\146\376\202\313\341\340\032\202\303\100\201\002\003 -\001\000\001\243\102\060\100\060\035\006\003\125\035\016\004\026 -\004\024\275\210\207\311\217\366\244\012\013\252\353\305\376\221 -\043\235\253\112\212\062\060\016\006\003\125\035\017\001\001\377 -\004\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377 -\004\005\060\003\001\001\377\060\015\006\011\052\206\110\206\367 -\015\001\001\005\005\000\003\202\001\001\000\035\174\372\111\217 -\064\351\267\046\222\026\232\005\164\347\113\320\155\071\154\303 -\046\366\316\270\061\274\304\337\274\052\370\067\221\030\334\004 -\310\144\231\053\030\155\200\003\131\311\256\370\130\320\076\355 -\303\043\237\151\074\206\070\034\236\357\332\047\170\321\204\067 -\161\212\074\113\071\317\176\105\006\326\055\330\212\115\170\022 -\326\255\302\323\313\322\320\101\363\046\066\112\233\225\154\014 -\356\345\321\103\047\146\301\210\367\172\263\040\154\352\260\151 -\053\307\040\350\014\003\304\101\005\231\342\077\344\153\370\240 -\206\201\307\204\306\037\325\113\201\022\262\026\041\054\023\241 -\200\262\136\014\112\023\236\040\330\142\100\253\220\352\144\112 -\057\254\015\001\022\171\105\250\057\207\031\150\310\342\205\307 -\060\262\165\371\070\077\262\300\223\264\153\342\003\104\316\147 -\240\337\211\326\255\214\166\243\023\303\224\141\053\153\331\154 -\301\007\012\042\007\205\154\205\044\106\251\276\077\213\170\204 -\202\176\044\014\235\375\201\067\343\045\250\355\066\116\225\054 -\311\234\220\332\354\251\102\074\255\266\002 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for Certificate "TUBITAK UEKAE Kok Sertifika Hizmet Saglayicisi - Surum 3" -# Issuer: CN=T..B..TAK UEKAE K..k Sertifika Hizmet Sa..lay..c..s.. - S..r..m ...,OU=Kamu Sertifikasyon Merkezi,OU=Ulusal Elektronik ve Kriptoloji Ara..t..rma Enstit..s.. - UEKAE,O=T..rkiye Bilimsel ve Teknolojik Ara..t..rma Kurumu - T..B..TAK,L=Gebze - Kocaeli,C=TR -# Serial Number: 17 (0x11) -# Subject: CN=T..B..TAK UEKAE K..k Sertifika Hizmet Sa..lay..c..s.. - S..r..m ...,OU=Kamu Sertifikasyon Merkezi,OU=Ulusal Elektronik ve Kriptoloji Ara..t..rma Enstit..s.. - UEKAE,O=T..rkiye Bilimsel ve Teknolojik Ara..t..rma Kurumu - T..B..TAK,L=Gebze - Kocaeli,C=TR -# Not Valid Before: Fri Aug 24 11:37:07 2007 -# Not Valid After : Mon Aug 21 11:37:07 2017 -# Fingerprint (MD5): ED:41:F5:8C:50:C5:2B:9C:73:E6:EE:6C:EB:C2:A8:26 -# Fingerprint (SHA1): 1B:4B:39:61:26:27:6B:64:91:A2:68:6D:D7:02:43:21:2D:1F:1D:96 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\033\113\071\141\046\047\153\144\221\242\150\155\327\002\103\041 -\055\037\035\226 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\355\101\365\214\120\305\053\234\163\346\356\154\353\302\250\046 -END -CKA_ISSUER MULTILINE_OCTAL -\060\202\001\053\061\013\060\011\006\003\125\004\006\023\002\124 -\122\061\030\060\026\006\003\125\004\007\014\017\107\145\142\172 -\145\040\055\040\113\157\143\141\145\154\151\061\107\060\105\006 -\003\125\004\012\014\076\124\303\274\162\153\151\171\145\040\102 -\151\154\151\155\163\145\154\040\166\145\040\124\145\153\156\157 -\154\157\152\151\153\040\101\162\141\305\237\164\304\261\162\155 -\141\040\113\165\162\165\155\165\040\055\040\124\303\234\102\304 -\260\124\101\113\061\110\060\106\006\003\125\004\013\014\077\125 -\154\165\163\141\154\040\105\154\145\153\164\162\157\156\151\153 -\040\166\145\040\113\162\151\160\164\157\154\157\152\151\040\101 -\162\141\305\237\164\304\261\162\155\141\040\105\156\163\164\151 -\164\303\274\163\303\274\040\055\040\125\105\113\101\105\061\043 -\060\041\006\003\125\004\013\014\032\113\141\155\165\040\123\145 -\162\164\151\146\151\153\141\163\171\157\156\040\115\145\162\153 -\145\172\151\061\112\060\110\006\003\125\004\003\014\101\124\303 -\234\102\304\260\124\101\113\040\125\105\113\101\105\040\113\303 -\266\153\040\123\145\162\164\151\146\151\153\141\040\110\151\172 -\155\145\164\040\123\141\304\237\154\141\171\304\261\143\304\261 -\163\304\261\040\055\040\123\303\274\162\303\274\155\040\063 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\021 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "certSIGN ROOT CA" # @@ -10460,172 +9937,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "ACEDICOM Root" -# -# Issuer: C=ES,O=EDICOM,OU=PKI,CN=ACEDICOM Root -# Serial Number:61:8d:c7:86:3b:01:82:05 -# Subject: C=ES,O=EDICOM,OU=PKI,CN=ACEDICOM Root -# Not Valid Before: Fri Apr 18 16:24:22 2008 -# Not Valid After : Thu Apr 13 16:24:22 2028 -# Fingerprint (MD5): 42:81:A0:E2:1C:E3:55:10:DE:55:89:42:65:96:22:E6 -# Fingerprint (SHA1): E0:B4:32:2E:B2:F6:A5:68:B6:54:53:84:48:18:4A:50:36:87:43:84 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "ACEDICOM Root" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\104\061\026\060\024\006\003\125\004\003\014\015\101\103\105 -\104\111\103\117\115\040\122\157\157\164\061\014\060\012\006\003 -\125\004\013\014\003\120\113\111\061\017\060\015\006\003\125\004 -\012\014\006\105\104\111\103\117\115\061\013\060\011\006\003\125 -\004\006\023\002\105\123 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\104\061\026\060\024\006\003\125\004\003\014\015\101\103\105 -\104\111\103\117\115\040\122\157\157\164\061\014\060\012\006\003 -\125\004\013\014\003\120\113\111\061\017\060\015\006\003\125\004 -\012\014\006\105\104\111\103\117\115\061\013\060\011\006\003\125 -\004\006\023\002\105\123 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\010\141\215\307\206\073\001\202\005 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\265\060\202\003\235\240\003\002\001\002\002\010\141 -\215\307\206\073\001\202\005\060\015\006\011\052\206\110\206\367 -\015\001\001\005\005\000\060\104\061\026\060\024\006\003\125\004 -\003\014\015\101\103\105\104\111\103\117\115\040\122\157\157\164 -\061\014\060\012\006\003\125\004\013\014\003\120\113\111\061\017 -\060\015\006\003\125\004\012\014\006\105\104\111\103\117\115\061 -\013\060\011\006\003\125\004\006\023\002\105\123\060\036\027\015 -\060\070\060\064\061\070\061\066\062\064\062\062\132\027\015\062 -\070\060\064\061\063\061\066\062\064\062\062\132\060\104\061\026 -\060\024\006\003\125\004\003\014\015\101\103\105\104\111\103\117 -\115\040\122\157\157\164\061\014\060\012\006\003\125\004\013\014 -\003\120\113\111\061\017\060\015\006\003\125\004\012\014\006\105 -\104\111\103\117\115\061\013\060\011\006\003\125\004\006\023\002 -\105\123\060\202\002\042\060\015\006\011\052\206\110\206\367\015 -\001\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202 -\002\001\000\377\222\225\341\150\006\166\264\054\310\130\110\312 -\375\200\124\051\125\143\044\377\220\145\233\020\165\173\303\152 -\333\142\002\001\362\030\206\265\174\132\070\261\344\130\271\373 -\323\330\055\237\275\062\067\277\054\025\155\276\265\364\041\322 -\023\221\331\007\255\001\005\326\363\275\167\316\137\102\201\012 -\371\152\343\203\000\250\053\056\125\023\143\201\312\107\034\173 -\134\026\127\172\033\203\140\004\072\076\145\303\315\001\336\336 -\244\326\014\272\216\336\331\004\356\027\126\042\233\217\143\375 -\115\026\013\267\173\167\214\371\045\265\321\155\231\022\056\117 -\032\270\346\352\004\222\256\075\021\271\121\102\075\207\260\061 -\205\257\171\132\234\376\347\116\136\222\117\103\374\253\072\255 -\245\022\046\146\271\342\014\327\230\316\324\130\245\225\100\012 -\267\104\235\023\164\053\302\245\353\042\025\230\020\330\213\305 -\004\237\035\217\140\345\006\033\233\317\271\171\240\075\242\043 -\077\102\077\153\372\034\003\173\060\215\316\154\300\277\346\033 -\137\277\147\270\204\031\325\025\357\173\313\220\066\061\142\311 -\274\002\253\106\137\233\376\032\150\224\064\075\220\216\255\366 -\344\035\011\177\112\210\070\077\276\147\375\064\226\365\035\274 -\060\164\313\070\356\325\154\253\324\374\364\000\267\000\133\205 -\062\026\166\063\351\330\243\231\235\005\000\252\026\346\363\201 -\175\157\175\252\206\155\255\025\164\323\304\242\161\252\364\024 -\175\347\062\270\037\274\325\361\116\275\157\027\002\071\327\016 -\225\102\072\307\000\076\351\046\143\021\352\013\321\112\377\030 -\235\262\327\173\057\072\331\226\373\350\036\222\256\023\125\310 -\331\047\366\334\110\033\260\044\301\205\343\167\235\232\244\363 -\014\021\035\015\310\264\024\356\265\202\127\011\277\040\130\177 -\057\042\043\330\160\313\171\154\311\113\362\251\052\310\374\207 -\053\327\032\120\370\047\350\057\103\343\072\275\330\127\161\375 -\316\246\122\133\371\335\115\355\345\366\157\211\355\273\223\234 -\166\041\165\360\222\114\051\367\057\234\001\056\376\120\106\236 -\144\014\024\263\007\133\305\302\163\154\361\007\134\105\044\024 -\065\256\203\361\152\115\211\172\372\263\330\055\146\360\066\207 -\365\053\123\002\003\001\000\001\243\201\252\060\201\247\060\017 -\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 -\037\006\003\125\035\043\004\030\060\026\200\024\246\263\341\053 -\053\111\266\327\163\241\252\224\365\001\347\163\145\114\254\120 -\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206 -\060\035\006\003\125\035\016\004\026\004\024\246\263\341\053\053 -\111\266\327\163\241\252\224\365\001\347\163\145\114\254\120\060 -\104\006\003\125\035\040\004\075\060\073\060\071\006\004\125\035 -\040\000\060\061\060\057\006\010\053\006\001\005\005\007\002\001 -\026\043\150\164\164\160\072\057\057\141\143\145\144\151\143\157 -\155\056\145\144\151\143\157\155\147\162\157\165\160\056\143\157 -\155\057\144\157\143\060\015\006\011\052\206\110\206\367\015\001 -\001\005\005\000\003\202\002\001\000\316\054\013\122\121\142\046 -\175\014\047\203\217\305\366\332\240\150\173\117\222\136\352\244 -\163\062\021\123\104\262\104\313\235\354\017\171\102\263\020\246 -\307\015\235\313\266\372\077\072\174\352\277\210\123\033\074\367 -\202\372\005\065\063\341\065\250\127\300\347\375\215\117\077\223 -\062\117\170\146\003\167\007\130\351\225\310\176\076\320\171\000 -\214\362\033\121\063\233\274\224\351\072\173\156\122\055\062\236 -\043\244\105\373\266\056\023\260\213\030\261\335\316\325\035\247 -\102\177\125\276\373\133\273\107\324\374\044\315\004\256\226\005 -\025\326\254\316\060\363\312\013\305\272\342\042\340\246\255\042 -\344\002\356\164\021\177\114\377\170\035\065\332\346\002\064\353 -\030\022\141\167\006\011\026\143\352\030\255\242\207\037\362\307 -\200\011\011\165\116\020\250\217\075\206\270\165\021\300\044\142 -\212\226\173\112\105\351\354\131\305\276\153\203\346\341\350\254 -\265\060\036\376\005\007\200\371\341\043\015\120\217\005\230\377 -\054\137\350\073\266\255\317\201\265\041\207\312\010\052\043\047 -\060\040\053\317\355\224\133\254\262\172\322\307\050\241\212\013 -\233\115\112\054\155\205\077\011\162\074\147\342\331\334\007\272 -\353\145\173\132\001\143\326\220\133\117\027\146\075\177\013\031 -\243\223\143\020\122\052\237\024\026\130\342\334\245\364\241\026 -\213\016\221\213\201\312\233\131\372\330\153\221\007\145\125\137 -\122\037\257\072\373\220\335\151\245\133\234\155\016\054\266\372 -\316\254\245\174\062\112\147\100\334\060\064\043\335\327\004\043 -\146\360\374\125\200\247\373\146\031\202\065\147\142\160\071\136 -\157\307\352\220\100\104\010\036\270\262\326\333\356\131\247\015 -\030\171\064\274\124\030\136\123\312\064\121\355\105\012\346\216 -\307\202\066\076\247\070\143\251\060\054\027\020\140\222\237\125 -\207\022\131\020\302\017\147\151\021\314\116\036\176\112\232\255 -\257\100\250\165\254\126\220\164\270\240\234\245\171\157\334\351 -\032\310\151\005\351\272\372\003\263\174\344\340\116\302\316\235 -\350\266\106\015\156\176\127\072\147\224\302\313\037\234\167\112 -\147\116\151\206\103\223\070\373\266\333\117\203\221\324\140\176 -\113\076\053\070\007\125\230\136\244 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for Certificate "ACEDICOM Root" -# Issuer: C=ES,O=EDICOM,OU=PKI,CN=ACEDICOM Root -# Serial Number:61:8d:c7:86:3b:01:82:05 -# Subject: C=ES,O=EDICOM,OU=PKI,CN=ACEDICOM Root -# Not Valid Before: Fri Apr 18 16:24:22 2008 -# Not Valid After : Thu Apr 13 16:24:22 2028 -# Fingerprint (MD5): 42:81:A0:E2:1C:E3:55:10:DE:55:89:42:65:96:22:E6 -# Fingerprint (SHA1): E0:B4:32:2E:B2:F6:A5:68:B6:54:53:84:48:18:4A:50:36:87:43:84 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "ACEDICOM Root" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\340\264\062\056\262\366\245\150\266\124\123\204\110\030\112\120 -\066\207\103\204 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\102\201\240\342\034\343\125\020\336\125\211\102\145\226\042\346 -END -CKA_ISSUER MULTILINE_OCTAL -\060\104\061\026\060\024\006\003\125\004\003\014\015\101\103\105 -\104\111\103\117\115\040\122\157\157\164\061\014\060\012\006\003 -\125\004\013\014\003\120\113\111\061\017\060\015\006\003\125\004 -\012\014\006\105\104\111\103\117\115\061\013\060\011\006\003\125 -\004\006\023\002\105\123 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\010\141\215\307\206\073\001\202\005 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - - # # Certificate "Microsec e-Szigno Root CA 2009" # @@ -14492,175 +13803,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Certinomis - Autorité Racine" -# -# Issuer: CN=Certinomis - Autorit.. Racine,OU=0002 433998903,O=Certinomis,C=FR -# Serial Number: 1 (0x1) -# Subject: CN=Certinomis - Autorit.. Racine,OU=0002 433998903,O=Certinomis,C=FR -# Not Valid Before: Wed Sep 17 08:28:59 2008 -# Not Valid After : Sun Sep 17 08:28:59 2028 -# Fingerprint (MD5): 7F:30:78:8C:03:E3:CA:C9:0A:E2:C9:EA:1E:AA:55:1A -# Fingerprint (SHA1): 2E:14:DA:EC:28:F0:FA:1E:8E:38:9A:4E:AB:EB:26:C0:0A:D3:83:C3 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certinomis - Autorité Racine" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\143\061\013\060\011\006\003\125\004\006\023\002\106\122\061 -\023\060\021\006\003\125\004\012\023\012\103\145\162\164\151\156 -\157\155\151\163\061\027\060\025\006\003\125\004\013\023\016\060 -\060\060\062\040\064\063\063\071\071\070\071\060\063\061\046\060 -\044\006\003\125\004\003\014\035\103\145\162\164\151\156\157\155 -\151\163\040\055\040\101\165\164\157\162\151\164\303\251\040\122 -\141\143\151\156\145 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\143\061\013\060\011\006\003\125\004\006\023\002\106\122\061 -\023\060\021\006\003\125\004\012\023\012\103\145\162\164\151\156 -\157\155\151\163\061\027\060\025\006\003\125\004\013\023\016\060 -\060\060\062\040\064\063\063\071\071\070\071\060\063\061\046\060 -\044\006\003\125\004\003\014\035\103\145\162\164\151\156\157\155 -\151\163\040\055\040\101\165\164\157\162\151\164\303\251\040\122 -\141\143\151\156\145 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\234\060\202\003\204\240\003\002\001\002\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\143\061\013\060\011\006\003\125\004\006\023\002\106\122\061\023 -\060\021\006\003\125\004\012\023\012\103\145\162\164\151\156\157 -\155\151\163\061\027\060\025\006\003\125\004\013\023\016\060\060 -\060\062\040\064\063\063\071\071\070\071\060\063\061\046\060\044 -\006\003\125\004\003\014\035\103\145\162\164\151\156\157\155\151 -\163\040\055\040\101\165\164\157\162\151\164\303\251\040\122\141 -\143\151\156\145\060\036\027\015\060\070\060\071\061\067\060\070 -\062\070\065\071\132\027\015\062\070\060\071\061\067\060\070\062 -\070\065\071\132\060\143\061\013\060\011\006\003\125\004\006\023 -\002\106\122\061\023\060\021\006\003\125\004\012\023\012\103\145 -\162\164\151\156\157\155\151\163\061\027\060\025\006\003\125\004 -\013\023\016\060\060\060\062\040\064\063\063\071\071\070\071\060 -\063\061\046\060\044\006\003\125\004\003\014\035\103\145\162\164 -\151\156\157\155\151\163\040\055\040\101\165\164\157\162\151\164 -\303\251\040\122\141\143\151\156\145\060\202\002\042\060\015\006 -\011\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017 -\000\060\202\002\012\002\202\002\001\000\235\205\237\206\323\343 -\257\307\262\153\156\063\340\236\267\102\064\125\235\371\201\276 -\143\330\043\166\016\227\124\315\231\114\032\361\071\307\210\330 -\027\120\014\236\141\332\300\116\125\336\347\132\270\172\116\167 -\207\015\345\270\353\372\236\136\173\036\304\317\050\164\307\223 -\365\024\306\042\050\004\371\221\303\253\047\163\152\016\056\115 -\363\056\050\037\160\337\125\057\116\355\307\161\157\011\162\056 -\355\325\062\227\320\361\130\167\321\140\274\116\136\333\232\204 -\366\107\141\105\053\366\120\246\177\152\161\047\110\204\065\236 -\254\376\151\251\236\172\136\065\045\372\264\247\111\065\167\226 -\247\066\133\341\315\337\043\160\330\135\114\245\010\203\361\246 -\044\070\023\250\354\057\250\241\147\307\246\055\206\107\356\212 -\374\354\233\016\164\364\053\111\002\173\220\165\214\374\231\071 -\001\071\326\112\211\345\236\166\253\076\226\050\070\046\213\335 -\215\214\300\366\001\036\157\245\061\022\070\175\225\302\161\356 -\355\164\256\344\066\242\103\165\325\361\000\233\342\344\327\314 -\102\003\113\170\172\345\175\273\270\256\056\040\223\323\344\141 -\337\161\341\166\147\227\077\266\337\152\163\132\144\042\345\102 -\333\317\201\003\223\330\364\343\020\340\162\366\000\160\254\360 -\301\172\017\005\177\317\064\151\105\265\223\344\031\333\122\026 -\043\005\211\016\215\110\344\045\157\263\170\277\142\365\007\372 -\225\044\302\226\262\350\243\043\302\135\003\374\303\323\345\174 -\311\165\043\327\364\365\274\336\344\337\315\200\277\221\210\175 -\247\023\264\071\272\054\272\275\321\153\314\363\245\050\355\104 -\236\175\122\243\157\226\056\031\176\034\363\133\307\026\216\273 -\140\175\167\146\107\124\202\000\021\140\154\062\301\250\070\033 -\353\156\230\023\326\356\070\365\360\237\016\357\376\061\201\301 -\322\044\225\057\123\172\151\242\360\017\206\105\216\130\202\053 -\114\042\324\136\240\347\175\046\047\110\337\045\106\215\112\050 -\174\206\236\371\233\032\131\271\145\277\005\335\266\102\135\075 -\346\000\110\202\136\040\367\021\202\336\312\330\237\346\067\107 -\046\036\353\170\367\141\303\101\144\130\002\101\371\332\340\321 -\370\371\350\375\122\070\266\365\211\337\002\003\001\000\001\243 -\133\060\131\060\017\006\003\125\035\023\001\001\377\004\005\060 -\003\001\001\377\060\016\006\003\125\035\017\001\001\377\004\004 -\003\002\001\006\060\035\006\003\125\035\016\004\026\004\024\015 -\214\266\141\332\104\270\321\024\175\303\276\175\136\110\360\316 -\312\152\260\060\027\006\003\125\035\040\004\020\060\016\060\014 -\006\012\052\201\172\001\126\002\002\000\001\001\060\015\006\011 -\052\206\110\206\367\015\001\001\005\005\000\003\202\002\001\000 -\044\076\140\006\176\035\357\072\076\333\352\257\034\232\054\001 -\013\364\305\265\331\111\061\364\135\101\215\211\014\116\377\154 -\242\375\377\342\006\310\071\237\361\132\251\335\042\130\025\250 -\212\323\261\346\062\011\202\003\154\327\077\010\307\370\271\272 -\000\155\271\326\374\122\062\135\244\177\244\061\224\273\266\114 -\070\177\050\060\065\377\237\043\123\267\266\356\024\160\000\100 -\053\332\107\253\064\176\136\247\126\060\141\053\213\103\254\375 -\266\210\050\365\153\266\076\140\112\272\102\220\064\147\215\352 -\353\137\105\124\073\027\254\213\344\306\145\017\356\320\214\135 -\146\071\316\062\247\330\020\227\300\176\064\234\237\224\363\366 -\206\037\317\033\163\255\224\171\207\150\160\303\063\245\160\347 -\330\325\070\224\157\143\171\353\277\012\016\010\347\305\057\017 -\102\240\053\024\100\377\041\340\005\305\047\341\204\021\023\272 -\326\206\035\101\013\023\043\211\323\311\013\350\212\272\172\243 -\243\163\067\065\200\175\022\270\063\167\100\070\300\372\136\060 -\322\362\266\243\261\326\242\225\227\201\233\122\355\151\114\377 -\200\344\123\333\124\133\003\155\124\137\261\270\357\044\275\157 -\237\021\303\307\144\302\017\050\142\205\146\136\032\173\262\267 -\357\256\065\311\031\063\250\270\047\333\063\125\277\150\341\165 -\110\104\126\373\315\323\110\273\107\211\072\254\151\365\200\306 -\344\104\120\057\124\304\252\103\305\061\061\130\275\226\305\352 -\165\154\232\165\261\115\370\367\227\377\226\026\362\227\115\350 -\366\363\021\371\072\175\212\070\156\004\313\341\323\105\025\252 -\245\321\035\235\135\143\350\044\346\066\024\342\207\255\033\131 -\365\104\233\373\327\167\174\037\001\160\142\241\040\032\242\305 -\032\050\364\041\003\356\056\331\301\200\352\271\331\202\326\133 -\166\302\313\073\265\322\000\360\243\016\341\255\156\100\367\333 -\240\264\320\106\256\025\327\104\302\115\065\371\322\013\362\027 -\366\254\146\325\044\262\117\321\034\231\300\156\365\175\353\164 -\004\270\371\115\167\011\327\264\317\007\060\011\361\270\000\126 -\331\027\026\026\012\053\206\337\217\001\031\032\345\273\202\143 -\377\276\013\166\026\136\067\067\346\330\164\227\242\231\105\171 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for Certificate "Certinomis - Autorité Racine" -# Issuer: CN=Certinomis - Autorit.. Racine,OU=0002 433998903,O=Certinomis,C=FR -# Serial Number: 1 (0x1) -# Subject: CN=Certinomis - Autorit.. Racine,OU=0002 433998903,O=Certinomis,C=FR -# Not Valid Before: Wed Sep 17 08:28:59 2008 -# Not Valid After : Sun Sep 17 08:28:59 2028 -# Fingerprint (MD5): 7F:30:78:8C:03:E3:CA:C9:0A:E2:C9:EA:1E:AA:55:1A -# Fingerprint (SHA1): 2E:14:DA:EC:28:F0:FA:1E:8E:38:9A:4E:AB:EB:26:C0:0A:D3:83:C3 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certinomis - Autorité Racine" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\056\024\332\354\050\360\372\036\216\070\232\116\253\353\046\300 -\012\323\203\303 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\177\060\170\214\003\343\312\311\012\342\311\352\036\252\125\032 -END -CKA_ISSUER MULTILINE_OCTAL -\060\143\061\013\060\011\006\003\125\004\006\023\002\106\122\061 -\023\060\021\006\003\125\004\012\023\012\103\145\162\164\151\156 -\157\155\151\163\061\027\060\025\006\003\125\004\013\023\016\060 -\060\060\062\040\064\063\063\071\071\070\071\060\063\061\046\060 -\044\006\003\125\004\003\014\035\103\145\162\164\151\156\157\155 -\151\163\040\055\040\101\165\164\157\162\151\164\303\251\040\122 -\141\143\151\156\145 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "TWCA Root Certification Authority" # @@ -16899,372 +16041,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "StartCom Certification Authority" -# -# Issuer: CN=StartCom Certification Authority,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL -# Serial Number: 45 (0x2d) -# Subject: CN=StartCom Certification Authority,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL -# Not Valid Before: Sun Sep 17 19:46:37 2006 -# Not Valid After : Wed Sep 17 19:46:36 2036 -# Fingerprint (MD5): C9:3B:0D:84:41:FC:A4:76:79:23:08:57:DE:10:19:16 -# Fingerprint (SHA1): A3:F1:33:3F:E2:42:BF:CF:C5:D1:4E:8F:39:42:98:40:68:10:D1:A0 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "StartCom Certification Authority" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\053\060\051\006\003\125\004\013 -\023\042\123\145\143\165\162\145\040\104\151\147\151\164\141\154 -\040\103\145\162\164\151\146\151\143\141\164\145\040\123\151\147 -\156\151\156\147\061\051\060\047\006\003\125\004\003\023\040\123 -\164\141\162\164\103\157\155\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\053\060\051\006\003\125\004\013 -\023\042\123\145\143\165\162\145\040\104\151\147\151\164\141\154 -\040\103\145\162\164\151\146\151\143\141\164\145\040\123\151\147 -\156\151\156\147\061\051\060\047\006\003\125\004\003\023\040\123 -\164\141\162\164\103\157\155\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\055 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\007\207\060\202\005\157\240\003\002\001\002\002\001\055 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\175\061\013\060\011\006\003\125\004\006\023\002\111\114\061\026 -\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103\157 -\155\040\114\164\144\056\061\053\060\051\006\003\125\004\013\023 -\042\123\145\143\165\162\145\040\104\151\147\151\164\141\154\040 -\103\145\162\164\151\146\151\143\141\164\145\040\123\151\147\156 -\151\156\147\061\051\060\047\006\003\125\004\003\023\040\123\164 -\141\162\164\103\157\155\040\103\145\162\164\151\146\151\143\141 -\164\151\157\156\040\101\165\164\150\157\162\151\164\171\060\036 -\027\015\060\066\060\071\061\067\061\071\064\066\063\067\132\027 -\015\063\066\060\071\061\067\061\071\064\066\063\066\132\060\175 -\061\013\060\011\006\003\125\004\006\023\002\111\114\061\026\060 -\024\006\003\125\004\012\023\015\123\164\141\162\164\103\157\155 -\040\114\164\144\056\061\053\060\051\006\003\125\004\013\023\042 -\123\145\143\165\162\145\040\104\151\147\151\164\141\154\040\103 -\145\162\164\151\146\151\143\141\164\145\040\123\151\147\156\151 -\156\147\061\051\060\047\006\003\125\004\003\023\040\123\164\141 -\162\164\103\157\155\040\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\060\202\002 -\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000 -\003\202\002\017\000\060\202\002\012\002\202\002\001\000\301\210 -\333\011\274\154\106\174\170\237\225\173\265\063\220\362\162\142 -\326\301\066\040\042\044\136\316\351\167\362\103\012\242\006\144 -\244\314\216\066\370\070\346\043\360\156\155\261\074\335\162\243 -\205\034\241\323\075\264\063\053\323\057\257\376\352\260\101\131 -\147\266\304\006\175\012\236\164\205\326\171\114\200\067\172\337 -\071\005\122\131\367\364\033\106\103\244\322\205\205\322\303\161 -\363\165\142\064\272\054\212\177\036\217\356\355\064\320\021\307 -\226\315\122\075\272\063\326\335\115\336\013\073\112\113\237\302 -\046\057\372\265\026\034\162\065\167\312\074\135\346\312\341\046 -\213\032\066\166\134\001\333\164\024\045\376\355\265\240\210\017 -\335\170\312\055\037\007\227\060\001\055\162\171\372\106\326\023 -\052\250\271\246\253\203\111\035\345\362\357\335\344\001\216\030 -\012\217\143\123\026\205\142\251\016\031\072\314\265\146\246\302 -\153\164\007\344\053\341\166\076\264\155\330\366\104\341\163\142 -\037\073\304\276\240\123\126\045\154\121\011\367\252\253\312\277 -\166\375\155\233\363\235\333\277\075\146\274\014\126\252\257\230 -\110\225\072\113\337\247\130\120\331\070\165\251\133\352\103\014 -\002\377\231\353\350\154\115\160\133\051\145\234\335\252\135\314 -\257\001\061\354\014\353\322\215\350\352\234\173\346\156\367\047 -\146\014\032\110\327\156\102\343\077\336\041\076\173\341\015\160 -\373\143\252\250\154\032\124\264\134\045\172\311\242\311\213\026 -\246\273\054\176\027\136\005\115\130\156\022\035\001\356\022\020 -\015\306\062\177\030\377\374\364\372\315\156\221\350\066\111\276 -\032\110\151\213\302\226\115\032\022\262\151\027\301\012\220\326 -\372\171\042\110\277\272\173\151\370\160\307\372\172\067\330\330 -\015\322\166\117\127\377\220\267\343\221\322\335\357\302\140\267 -\147\072\335\376\252\234\360\324\213\177\162\042\316\306\237\227 -\266\370\257\212\240\020\250\331\373\030\306\266\265\134\122\074 -\211\266\031\052\163\001\012\017\003\263\022\140\362\172\057\201 -\333\243\156\377\046\060\227\365\213\335\211\127\266\255\075\263 -\257\053\305\267\166\002\360\245\326\053\232\206\024\052\162\366 -\343\063\214\135\011\113\023\337\273\214\164\023\122\113\002\003 -\001\000\001\243\202\002\020\060\202\002\014\060\017\006\003\125 -\035\023\001\001\377\004\005\060\003\001\001\377\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\035\006\003 -\125\035\016\004\026\004\024\116\013\357\032\244\100\133\245\027 -\151\207\060\312\064\150\103\320\101\256\362\060\037\006\003\125 -\035\043\004\030\060\026\200\024\116\013\357\032\244\100\133\245 -\027\151\207\060\312\064\150\103\320\101\256\362\060\202\001\132 -\006\003\125\035\040\004\202\001\121\060\202\001\115\060\202\001 -\111\006\013\053\006\001\004\001\201\265\067\001\001\001\060\202 -\001\070\060\056\006\010\053\006\001\005\005\007\002\001\026\042 -\150\164\164\160\072\057\057\167\167\167\056\163\164\141\162\164 -\163\163\154\056\143\157\155\057\160\157\154\151\143\171\056\160 -\144\146\060\064\006\010\053\006\001\005\005\007\002\001\026\050 -\150\164\164\160\072\057\057\167\167\167\056\163\164\141\162\164 -\163\163\154\056\143\157\155\057\151\156\164\145\162\155\145\144 -\151\141\164\145\056\160\144\146\060\201\317\006\010\053\006\001 -\005\005\007\002\002\060\201\302\060\047\026\040\123\164\141\162 -\164\040\103\157\155\155\145\162\143\151\141\154\040\050\123\164 -\141\162\164\103\157\155\051\040\114\164\144\056\060\003\002\001 -\001\032\201\226\114\151\155\151\164\145\144\040\114\151\141\142 -\151\154\151\164\171\054\040\162\145\141\144\040\164\150\145\040 -\163\145\143\164\151\157\156\040\052\114\145\147\141\154\040\114 -\151\155\151\164\141\164\151\157\156\163\052\040\157\146\040\164 -\150\145\040\123\164\141\162\164\103\157\155\040\103\145\162\164 -\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162 -\151\164\171\040\120\157\154\151\143\171\040\141\166\141\151\154 -\141\142\154\145\040\141\164\040\150\164\164\160\072\057\057\167 -\167\167\056\163\164\141\162\164\163\163\154\056\143\157\155\057 -\160\157\154\151\143\171\056\160\144\146\060\021\006\011\140\206 -\110\001\206\370\102\001\001\004\004\003\002\000\007\060\070\006 -\011\140\206\110\001\206\370\102\001\015\004\053\026\051\123\164 -\141\162\164\103\157\155\040\106\162\145\145\040\123\123\114\040 -\103\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165 -\164\150\157\162\151\164\171\060\015\006\011\052\206\110\206\367 -\015\001\001\013\005\000\003\202\002\001\000\216\217\347\334\224 -\171\174\361\205\177\237\111\157\153\312\135\373\214\376\004\305 -\301\142\321\175\102\212\274\123\267\224\003\146\060\077\261\347 -\012\247\120\040\125\045\177\166\172\024\015\353\004\016\100\346 -\076\330\210\253\007\047\203\251\165\246\067\163\307\375\113\322 -\115\255\027\100\310\106\276\073\177\121\374\303\266\005\061\334 -\315\205\042\116\161\267\362\161\136\260\032\306\272\223\213\170 -\222\112\205\370\170\017\203\376\057\255\054\367\344\244\273\055 -\320\347\015\072\270\076\316\366\170\366\256\107\044\312\243\065 -\066\316\307\306\207\230\332\354\373\351\262\316\047\233\210\303 -\004\241\366\013\131\150\257\311\333\020\017\115\366\144\143\134 -\245\022\157\222\262\223\224\307\210\027\016\223\266\176\142\213 -\220\177\253\116\237\374\343\165\024\117\052\062\337\133\015\340 -\365\173\223\015\253\241\317\207\341\245\004\105\350\074\022\245 -\011\305\260\321\267\123\363\140\024\272\205\151\152\041\174\037 -\165\141\027\040\027\173\154\073\101\051\134\341\254\132\321\315 -\214\233\353\140\035\031\354\367\345\260\332\371\171\030\245\105 -\077\111\103\127\322\335\044\325\054\243\375\221\215\047\265\345 -\353\024\006\232\114\173\041\273\072\255\060\006\030\300\330\301 -\153\054\177\131\134\135\221\261\160\042\127\353\212\153\110\112 -\325\017\051\354\306\100\300\057\210\114\150\001\027\167\364\044 -\031\117\275\372\341\262\040\041\113\335\032\330\051\175\252\270 -\336\124\354\041\125\200\154\036\365\060\310\243\020\345\262\346 -\052\024\061\303\205\055\214\230\261\206\132\117\211\131\055\271 -\307\367\034\310\212\177\300\235\005\112\346\102\117\142\243\155 -\051\244\037\205\253\333\345\201\310\255\052\075\114\135\133\204 -\046\161\304\205\136\161\044\312\245\033\154\330\141\323\032\340 -\124\333\316\272\251\062\265\042\366\163\101\011\135\270\027\135 -\016\017\231\220\326\107\332\157\012\072\142\050\024\147\202\331 -\361\320\200\131\233\313\061\330\233\017\214\167\116\265\150\212 -\362\154\366\044\016\055\154\160\305\163\321\336\024\320\161\217 -\266\323\173\002\366\343\270\324\011\156\153\236\165\204\071\346 -\177\045\245\362\110\000\300\244\001\332\077 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for "StartCom Certification Authority" -# Issuer: CN=StartCom Certification Authority,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL -# Serial Number: 45 (0x2d) -# Subject: CN=StartCom Certification Authority,OU=Secure Digital Certificate Signing,O=StartCom Ltd.,C=IL -# Not Valid Before: Sun Sep 17 19:46:37 2006 -# Not Valid After : Wed Sep 17 19:46:36 2036 -# Fingerprint (MD5): C9:3B:0D:84:41:FC:A4:76:79:23:08:57:DE:10:19:16 -# Fingerprint (SHA1): A3:F1:33:3F:E2:42:BF:CF:C5:D1:4E:8F:39:42:98:40:68:10:D1:A0 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "StartCom Certification Authority" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\243\361\063\077\342\102\277\317\305\321\116\217\071\102\230\100 -\150\020\321\240 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\311\073\015\204\101\374\244\166\171\043\010\127\336\020\031\026 -END -CKA_ISSUER MULTILINE_OCTAL -\060\175\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\053\060\051\006\003\125\004\013 -\023\042\123\145\143\165\162\145\040\104\151\147\151\164\141\154 -\040\103\145\162\164\151\146\151\143\141\164\145\040\123\151\147 -\156\151\156\147\061\051\060\047\006\003\125\004\003\023\040\123 -\164\141\162\164\103\157\155\040\103\145\162\164\151\146\151\143 -\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\055 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "StartCom Certification Authority G2" -# -# Issuer: CN=StartCom Certification Authority G2,O=StartCom Ltd.,C=IL -# Serial Number: 59 (0x3b) -# Subject: CN=StartCom Certification Authority G2,O=StartCom Ltd.,C=IL -# Not Valid Before: Fri Jan 01 01:00:01 2010 -# Not Valid After : Sat Dec 31 23:59:01 2039 -# Fingerprint (MD5): 78:4B:FB:9E:64:82:0A:D3:B8:4C:62:F3:64:F2:90:64 -# Fingerprint (SHA1): 31:F1:FD:68:22:63:20:EE:C6:3B:3F:9D:EA:4A:3E:53:7C:7C:39:17 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "StartCom Certification Authority G2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\123\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\054\060\052\006\003\125\004\003 -\023\043\123\164\141\162\164\103\157\155\040\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\040\107\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\123\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\054\060\052\006\003\125\004\003 -\023\043\123\164\141\162\164\103\157\155\040\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\073 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\143\060\202\003\113\240\003\002\001\002\002\001\073 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\123\061\013\060\011\006\003\125\004\006\023\002\111\114\061\026 -\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103\157 -\155\040\114\164\144\056\061\054\060\052\006\003\125\004\003\023 -\043\123\164\141\162\164\103\157\155\040\103\145\162\164\151\146 -\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 -\171\040\107\062\060\036\027\015\061\060\060\061\060\061\060\061 -\060\060\060\061\132\027\015\063\071\061\062\063\061\062\063\065 -\071\060\061\132\060\123\061\013\060\011\006\003\125\004\006\023 -\002\111\114\061\026\060\024\006\003\125\004\012\023\015\123\164 -\141\162\164\103\157\155\040\114\164\144\056\061\054\060\052\006 -\003\125\004\003\023\043\123\164\141\162\164\103\157\155\040\103 -\145\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164 -\150\157\162\151\164\171\040\107\062\060\202\002\042\060\015\006 -\011\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017 -\000\060\202\002\012\002\202\002\001\000\266\211\066\133\007\267 -\040\066\275\202\273\341\026\040\003\225\172\257\016\243\125\311 -\045\231\112\305\320\126\101\207\220\115\041\140\244\024\207\073 -\315\375\262\076\264\147\003\152\355\341\017\113\300\221\205\160 -\105\340\102\236\336\051\043\324\001\015\240\020\171\270\333\003 -\275\363\251\057\321\306\340\017\313\236\212\024\012\270\275\366 -\126\142\361\305\162\266\062\045\331\262\363\275\145\305\015\054 -\156\325\222\157\030\213\000\101\024\202\157\100\040\046\172\050 -\017\365\036\177\047\367\224\261\067\075\267\307\221\367\342\001 -\354\375\224\211\341\314\156\323\066\326\012\031\171\256\327\064 -\202\145\377\174\102\273\266\335\013\246\064\257\113\140\376\177 -\103\111\006\213\214\103\270\126\362\331\177\041\103\027\352\247 -\110\225\001\165\165\352\053\245\103\225\352\025\204\235\010\215 -\046\156\125\233\253\334\322\071\322\061\035\140\342\254\314\126 -\105\044\365\034\124\253\356\206\335\226\062\205\370\114\117\350 -\225\166\266\005\335\066\043\147\274\377\025\342\312\073\346\246 -\354\073\354\046\021\064\110\215\366\200\053\032\043\002\353\212 -\034\072\166\052\173\126\026\034\162\052\263\252\343\140\245\000 -\237\004\233\342\157\036\024\130\133\245\154\213\130\074\303\272 -\116\072\134\367\341\226\053\076\357\007\274\244\345\135\314\115 -\237\015\341\334\252\273\341\156\032\354\217\341\266\114\115\171 -\162\135\027\065\013\035\327\301\107\332\226\044\340\320\162\250 -\132\137\146\055\020\334\057\052\023\256\046\376\012\034\031\314 -\320\076\013\234\310\011\056\371\133\226\172\107\234\351\172\363 -\005\120\164\225\163\236\060\011\363\227\202\136\346\217\071\010 -\036\131\345\065\024\102\023\377\000\234\367\276\252\120\317\342 -\121\110\327\270\157\257\370\116\176\063\230\222\024\142\072\165 -\143\317\173\372\336\202\073\251\273\071\342\304\275\054\000\016 -\310\027\254\023\357\115\045\216\330\263\220\057\251\332\051\175 -\035\257\164\072\262\047\300\301\036\076\165\243\026\251\257\172 -\042\135\237\023\032\317\247\240\353\343\206\012\323\375\346\226 -\225\327\043\310\067\335\304\174\252\066\254\230\032\022\261\340 -\116\350\261\073\365\326\157\361\060\327\002\003\001\000\001\243 -\102\060\100\060\017\006\003\125\035\023\001\001\377\004\005\060 -\003\001\001\377\060\016\006\003\125\035\017\001\001\377\004\004 -\003\002\001\006\060\035\006\003\125\035\016\004\026\004\024\113 -\305\264\100\153\255\034\263\245\034\145\156\106\066\211\207\005 -\014\016\266\060\015\006\011\052\206\110\206\367\015\001\001\013 -\005\000\003\202\002\001\000\163\127\077\054\325\225\062\176\067 -\333\226\222\353\031\136\176\123\347\101\354\021\266\107\357\265 -\336\355\164\134\305\361\216\111\340\374\156\231\023\315\237\212 -\332\315\072\012\330\072\132\011\077\137\064\320\057\003\322\146 -\035\032\275\234\220\067\310\014\216\007\132\224\105\106\052\346 -\276\172\332\241\251\244\151\022\222\260\175\066\324\104\207\327 -\121\361\051\143\326\165\315\026\344\047\211\035\370\302\062\110 -\375\333\231\320\217\137\124\164\314\254\147\064\021\142\331\014 -\012\067\207\321\243\027\110\216\322\027\035\366\327\375\333\145 -\353\375\250\324\365\326\117\244\133\165\350\305\322\140\262\333 -\011\176\045\213\173\272\122\222\236\076\350\305\167\241\074\340 -\112\163\153\141\317\206\334\103\377\377\041\376\043\135\044\112 -\365\323\155\017\142\004\005\127\202\332\156\244\063\045\171\113 -\056\124\031\213\314\054\075\060\351\321\006\377\350\062\106\276 -\265\063\166\167\250\001\135\226\301\301\325\276\256\045\300\311 -\036\012\011\040\210\241\016\311\363\157\115\202\124\000\040\247 -\322\217\344\071\124\027\056\215\036\270\033\273\033\275\232\116 -\073\020\064\334\234\210\123\357\242\061\133\130\117\221\142\310 -\302\232\232\315\025\135\070\251\326\276\370\023\265\237\022\151 -\362\120\142\254\373\027\067\364\356\270\165\147\140\020\373\203 -\120\371\104\265\165\234\100\027\262\376\375\171\135\156\130\130 -\137\060\374\000\256\257\063\301\016\116\154\272\247\246\241\177 -\062\333\070\340\261\162\027\012\053\221\354\152\143\046\355\211 -\324\170\314\164\036\005\370\153\376\214\152\166\071\051\256\145 -\043\022\225\010\042\034\227\316\133\006\356\014\342\273\274\037 -\104\223\366\330\070\105\005\041\355\344\255\253\022\266\003\244 -\102\056\055\304\011\072\003\147\151\204\232\341\131\220\212\050 -\205\325\135\164\261\321\016\040\130\233\023\245\260\143\246\355 -\173\107\375\105\125\060\244\356\232\324\346\342\207\357\230\311 -\062\202\021\051\042\274\000\012\061\136\055\017\300\216\351\153 -\262\217\056\006\330\321\221\307\306\022\364\114\375\060\027\303 -\301\332\070\133\343\251\352\346\241\272\171\357\163\330\266\123 -\127\055\366\320\341\327\110 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for "StartCom Certification Authority G2" -# Issuer: CN=StartCom Certification Authority G2,O=StartCom Ltd.,C=IL -# Serial Number: 59 (0x3b) -# Subject: CN=StartCom Certification Authority G2,O=StartCom Ltd.,C=IL -# Not Valid Before: Fri Jan 01 01:00:01 2010 -# Not Valid After : Sat Dec 31 23:59:01 2039 -# Fingerprint (MD5): 78:4B:FB:9E:64:82:0A:D3:B8:4C:62:F3:64:F2:90:64 -# Fingerprint (SHA1): 31:F1:FD:68:22:63:20:EE:C6:3B:3F:9D:EA:4A:3E:53:7C:7C:39:17 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "StartCom Certification Authority G2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\061\361\375\150\042\143\040\356\306\073\077\235\352\112\076\123 -\174\174\071\027 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\170\113\373\236\144\202\012\323\270\114\142\363\144\362\220\144 -END -CKA_ISSUER MULTILINE_OCTAL -\060\123\061\013\060\011\006\003\125\004\006\023\002\111\114\061 -\026\060\024\006\003\125\004\012\023\015\123\164\141\162\164\103 -\157\155\040\114\164\144\056\061\054\060\052\006\003\125\004\003 -\023\043\123\164\141\162\164\103\157\155\040\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\073 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "Buypass Class 2 Root CA" # @@ -17946,172 +16722,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_NOT_TRUSTED CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_NOT_TRUSTED CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "TURKTRUST Certificate Services Provider Root 2007" -# -# Issuer: O=T..RKTRUST Bilgi ..leti..im ve Bili..im G..venli..i Hizmetleri A...,L=Ankara,C=TR,CN=T..RKTRUST Elektronik Sertifika Hizmet Sa..lay..c..s.. -# Serial Number: 1 (0x1) -# Subject: O=T..RKTRUST Bilgi ..leti..im ve Bili..im G..venli..i Hizmetleri A...,L=Ankara,C=TR,CN=T..RKTRUST Elektronik Sertifika Hizmet Sa..lay..c..s.. -# Not Valid Before: Tue Dec 25 18:37:19 2007 -# Not Valid After : Fri Dec 22 18:37:19 2017 -# Fingerprint (MD5): 2B:70:20:56:86:82:A0:18:C8:07:53:12:28:70:21:72 -# Fingerprint (SHA1): F1:7F:6F:B6:31:DC:99:E3:A3:C8:7F:FE:1C:F1:81:10:88:D9:60:33 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TURKTRUST Certificate Services Provider Root 2007" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\277\061\077\060\075\006\003\125\004\003\014\066\124\303 -\234\122\113\124\122\125\123\124\040\105\154\145\153\164\162\157 -\156\151\153\040\123\145\162\164\151\146\151\153\141\040\110\151 -\172\155\145\164\040\123\141\304\237\154\141\171\304\261\143\304 -\261\163\304\261\061\013\060\011\006\003\125\004\006\023\002\124 -\122\061\017\060\015\006\003\125\004\007\014\006\101\156\153\141 -\162\141\061\136\060\134\006\003\125\004\012\014\125\124\303\234 -\122\113\124\122\125\123\124\040\102\151\154\147\151\040\304\260 -\154\145\164\151\305\237\151\155\040\166\145\040\102\151\154\151 -\305\237\151\155\040\107\303\274\166\145\156\154\151\304\237\151 -\040\110\151\172\155\145\164\154\145\162\151\040\101\056\305\236 -\056\040\050\143\051\040\101\162\141\154\304\261\153\040\062\060 -\060\067 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\201\277\061\077\060\075\006\003\125\004\003\014\066\124\303 -\234\122\113\124\122\125\123\124\040\105\154\145\153\164\162\157 -\156\151\153\040\123\145\162\164\151\146\151\153\141\040\110\151 -\172\155\145\164\040\123\141\304\237\154\141\171\304\261\143\304 -\261\163\304\261\061\013\060\011\006\003\125\004\006\023\002\124 -\122\061\017\060\015\006\003\125\004\007\014\006\101\156\153\141 -\162\141\061\136\060\134\006\003\125\004\012\014\125\124\303\234 -\122\113\124\122\125\123\124\040\102\151\154\147\151\040\304\260 -\154\145\164\151\305\237\151\155\040\166\145\040\102\151\154\151 -\305\237\151\155\040\107\303\274\166\145\156\154\151\304\237\151 -\040\110\151\172\155\145\164\154\145\162\151\040\101\056\305\236 -\056\040\050\143\051\040\101\162\141\154\304\261\153\040\062\060 -\060\067 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\004\075\060\202\003\045\240\003\002\001\002\002\001\001 -\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060 -\201\277\061\077\060\075\006\003\125\004\003\014\066\124\303\234 -\122\113\124\122\125\123\124\040\105\154\145\153\164\162\157\156 -\151\153\040\123\145\162\164\151\146\151\153\141\040\110\151\172 -\155\145\164\040\123\141\304\237\154\141\171\304\261\143\304\261 -\163\304\261\061\013\060\011\006\003\125\004\006\023\002\124\122 -\061\017\060\015\006\003\125\004\007\014\006\101\156\153\141\162 -\141\061\136\060\134\006\003\125\004\012\014\125\124\303\234\122 -\113\124\122\125\123\124\040\102\151\154\147\151\040\304\260\154 -\145\164\151\305\237\151\155\040\166\145\040\102\151\154\151\305 -\237\151\155\040\107\303\274\166\145\156\154\151\304\237\151\040 -\110\151\172\155\145\164\154\145\162\151\040\101\056\305\236\056 -\040\050\143\051\040\101\162\141\154\304\261\153\040\062\060\060 -\067\060\036\027\015\060\067\061\062\062\065\061\070\063\067\061 -\071\132\027\015\061\067\061\062\062\062\061\070\063\067\061\071 -\132\060\201\277\061\077\060\075\006\003\125\004\003\014\066\124 -\303\234\122\113\124\122\125\123\124\040\105\154\145\153\164\162 -\157\156\151\153\040\123\145\162\164\151\146\151\153\141\040\110 -\151\172\155\145\164\040\123\141\304\237\154\141\171\304\261\143 -\304\261\163\304\261\061\013\060\011\006\003\125\004\006\023\002 -\124\122\061\017\060\015\006\003\125\004\007\014\006\101\156\153 -\141\162\141\061\136\060\134\006\003\125\004\012\014\125\124\303 -\234\122\113\124\122\125\123\124\040\102\151\154\147\151\040\304 -\260\154\145\164\151\305\237\151\155\040\166\145\040\102\151\154 -\151\305\237\151\155\040\107\303\274\166\145\156\154\151\304\237 -\151\040\110\151\172\155\145\164\154\145\162\151\040\101\056\305 -\236\056\040\050\143\051\040\101\162\141\154\304\261\153\040\062 -\060\060\067\060\202\001\042\060\015\006\011\052\206\110\206\367 -\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012\002 -\202\001\001\000\253\267\076\012\214\310\245\130\025\346\212\357 -\047\075\112\264\350\045\323\315\063\302\040\334\031\356\210\077 -\115\142\360\335\023\167\217\141\251\052\265\324\362\271\061\130 -\051\073\057\077\152\234\157\163\166\045\356\064\040\200\356\352 -\267\360\304\012\315\053\206\224\311\343\140\261\104\122\262\132 -\051\264\221\227\203\330\267\246\024\057\051\111\242\363\005\006 -\373\264\117\332\241\154\232\146\237\360\103\011\312\352\162\217 -\353\000\327\065\071\327\126\027\107\027\060\364\276\277\077\302 -\150\257\066\100\301\251\364\251\247\350\020\153\010\212\367\206 -\036\334\232\052\025\006\366\243\360\364\340\307\024\324\121\177 -\317\264\333\155\257\107\226\027\233\167\161\330\247\161\235\044 -\014\366\224\077\205\061\022\117\272\356\116\202\270\271\076\217 -\043\067\136\314\242\252\165\367\030\157\011\323\256\247\124\050 -\064\373\341\340\073\140\175\240\276\171\211\206\310\237\055\371 -\012\113\304\120\242\347\375\171\026\307\172\013\030\317\316\114 -\357\175\326\007\157\230\361\257\261\301\172\327\201\065\270\252 -\027\264\340\313\002\003\001\000\001\243\102\060\100\060\035\006 -\003\125\035\016\004\026\004\024\051\305\220\253\045\257\021\344 -\141\277\243\377\210\141\221\346\016\376\234\201\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\017\006\003 -\125\035\023\001\001\377\004\005\060\003\001\001\377\060\015\006 -\011\052\206\110\206\367\015\001\001\005\005\000\003\202\001\001 -\000\020\015\332\370\072\354\050\321\024\225\202\261\022\054\121 -\172\101\045\066\114\237\354\077\037\204\235\145\124\134\250\026 -\002\100\372\156\032\067\204\357\162\235\206\012\125\235\126\050 -\254\146\054\320\072\126\223\064\007\045\255\010\260\217\310\017 -\011\131\312\235\230\034\345\124\370\271\105\177\152\227\157\210 -\150\115\112\006\046\067\210\002\016\266\306\326\162\231\316\153 -\167\332\142\061\244\126\037\256\137\215\167\332\135\366\210\374 -\032\331\236\265\201\360\062\270\343\210\320\234\363\152\240\271 -\233\024\131\065\066\117\317\363\216\136\135\027\255\025\225\330 -\335\262\325\025\156\000\116\263\113\317\146\224\344\340\315\265 -\005\332\143\127\213\345\263\252\333\300\056\034\220\104\333\032 -\135\030\244\356\276\004\133\231\325\161\137\125\145\144\142\325 -\242\233\004\131\206\310\142\167\347\174\202\105\152\075\027\277 -\354\235\165\014\256\243\157\132\323\057\230\066\364\360\365\031 -\253\021\135\310\246\343\052\130\152\102\011\303\275\222\046\146 -\062\015\135\010\125\164\377\214\230\320\012\246\204\152\321\071 -\175 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for "TURKTRUST Certificate Services Provider Root 2007" -# Issuer: O=T..RKTRUST Bilgi ..leti..im ve Bili..im G..venli..i Hizmetleri A...,L=Ankara,C=TR,CN=T..RKTRUST Elektronik Sertifika Hizmet Sa..lay..c..s.. -# Serial Number: 1 (0x1) -# Subject: O=T..RKTRUST Bilgi ..leti..im ve Bili..im G..venli..i Hizmetleri A...,L=Ankara,C=TR,CN=T..RKTRUST Elektronik Sertifika Hizmet Sa..lay..c..s.. -# Not Valid Before: Tue Dec 25 18:37:19 2007 -# Not Valid After : Fri Dec 22 18:37:19 2017 -# Fingerprint (MD5): 2B:70:20:56:86:82:A0:18:C8:07:53:12:28:70:21:72 -# Fingerprint (SHA1): F1:7F:6F:B6:31:DC:99:E3:A3:C8:7F:FE:1C:F1:81:10:88:D9:60:33 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "TURKTRUST Certificate Services Provider Root 2007" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\361\177\157\266\061\334\231\343\243\310\177\376\034\361\201\020 -\210\331\140\063 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\053\160\040\126\206\202\240\030\310\007\123\022\050\160\041\162 -END -CKA_ISSUER MULTILINE_OCTAL -\060\201\277\061\077\060\075\006\003\125\004\003\014\066\124\303 -\234\122\113\124\122\125\123\124\040\105\154\145\153\164\162\157 -\156\151\153\040\123\145\162\164\151\146\151\153\141\040\110\151 -\172\155\145\164\040\123\141\304\237\154\141\171\304\261\143\304 -\261\163\304\261\061\013\060\011\006\003\125\004\006\023\002\124 -\122\061\017\060\015\006\003\125\004\007\014\006\101\156\153\141 -\162\141\061\136\060\134\006\003\125\004\012\014\125\124\303\234 -\122\113\124\122\125\123\124\040\102\151\154\147\151\040\304\260 -\154\145\164\151\305\237\151\155\040\166\145\040\102\151\154\151 -\305\237\151\155\040\107\303\274\166\145\156\154\151\304\237\151 -\040\110\151\172\155\145\164\154\145\162\151\040\101\056\305\236 -\056\040\050\143\051\040\101\162\141\154\304\261\153\040\062\060 -\060\067 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\001 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "D-TRUST Root Class 3 CA 2 2009" # @@ -18398,269 +17008,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "PSCProcert" -# -# Issuer: E=acraiz@suscerte.gob.ve,OU=Superintendencia de Servicios de Certificacion Electronica,O=Sistema Nacional de Certificacion Electronica,ST=Distrito Capital,L=Caracas,C=VE,CN=Autoridad de Certificacion Raiz del Estado Venezolano -# Serial Number: 11 (0xb) -# Subject: CN=PSCProcert,C=VE,O=Sistema Nacional de Certificacion Electronica,OU=Proveedor de Certificados PROCERT,ST=Miranda,L=Chacao,E=contacto@procert.net.ve -# Not Valid Before: Tue Dec 28 16:51:00 2010 -# Not Valid After : Fri Dec 25 23:59:59 2020 -# Fingerprint (MD5): E6:24:E9:12:01:AE:0C:DE:8E:85:C4:CE:A3:12:DD:EC -# Fingerprint (SHA1): 70:C1:8D:74:B4:28:81:0A:E4:FD:A5:75:D7:01:9F:99:B0:3D:50:74 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "PSCProcert" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\201\321\061\046\060\044\006\011\052\206\110\206\367\015\001 -\011\001\026\027\143\157\156\164\141\143\164\157\100\160\162\157 -\143\145\162\164\056\156\145\164\056\166\145\061\017\060\015\006 -\003\125\004\007\023\006\103\150\141\143\141\157\061\020\060\016 -\006\003\125\004\010\023\007\115\151\162\141\156\144\141\061\052 -\060\050\006\003\125\004\013\023\041\120\162\157\166\145\145\144 -\157\162\040\144\145\040\103\145\162\164\151\146\151\143\141\144 -\157\163\040\120\122\117\103\105\122\124\061\066\060\064\006\003 -\125\004\012\023\055\123\151\163\164\145\155\141\040\116\141\143 -\151\157\156\141\154\040\144\145\040\103\145\162\164\151\146\151 -\143\141\143\151\157\156\040\105\154\145\143\164\162\157\156\151 -\143\141\061\013\060\011\006\003\125\004\006\023\002\126\105\061 -\023\060\021\006\003\125\004\003\023\012\120\123\103\120\162\157 -\143\145\162\164 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\202\001\036\061\076\060\074\006\003\125\004\003\023\065\101 -\165\164\157\162\151\144\141\144\040\144\145\040\103\145\162\164 -\151\146\151\143\141\143\151\157\156\040\122\141\151\172\040\144 -\145\154\040\105\163\164\141\144\157\040\126\145\156\145\172\157 -\154\141\156\157\061\013\060\011\006\003\125\004\006\023\002\126 -\105\061\020\060\016\006\003\125\004\007\023\007\103\141\162\141 -\143\141\163\061\031\060\027\006\003\125\004\010\023\020\104\151 -\163\164\162\151\164\157\040\103\141\160\151\164\141\154\061\066 -\060\064\006\003\125\004\012\023\055\123\151\163\164\145\155\141 -\040\116\141\143\151\157\156\141\154\040\144\145\040\103\145\162 -\164\151\146\151\143\141\143\151\157\156\040\105\154\145\143\164 -\162\157\156\151\143\141\061\103\060\101\006\003\125\004\013\023 -\072\123\165\160\145\162\151\156\164\145\156\144\145\156\143\151 -\141\040\144\145\040\123\145\162\166\151\143\151\157\163\040\144 -\145\040\103\145\162\164\151\146\151\143\141\143\151\157\156\040 -\105\154\145\143\164\162\157\156\151\143\141\061\045\060\043\006 -\011\052\206\110\206\367\015\001\011\001\026\026\141\143\162\141 -\151\172\100\163\165\163\143\145\162\164\145\056\147\157\142\056 -\166\145 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\013 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\011\206\060\202\007\156\240\003\002\001\002\002\001\013 -\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060 -\202\001\036\061\076\060\074\006\003\125\004\003\023\065\101\165 -\164\157\162\151\144\141\144\040\144\145\040\103\145\162\164\151 -\146\151\143\141\143\151\157\156\040\122\141\151\172\040\144\145 -\154\040\105\163\164\141\144\157\040\126\145\156\145\172\157\154 -\141\156\157\061\013\060\011\006\003\125\004\006\023\002\126\105 -\061\020\060\016\006\003\125\004\007\023\007\103\141\162\141\143 -\141\163\061\031\060\027\006\003\125\004\010\023\020\104\151\163 -\164\162\151\164\157\040\103\141\160\151\164\141\154\061\066\060 -\064\006\003\125\004\012\023\055\123\151\163\164\145\155\141\040 -\116\141\143\151\157\156\141\154\040\144\145\040\103\145\162\164 -\151\146\151\143\141\143\151\157\156\040\105\154\145\143\164\162 -\157\156\151\143\141\061\103\060\101\006\003\125\004\013\023\072 -\123\165\160\145\162\151\156\164\145\156\144\145\156\143\151\141 -\040\144\145\040\123\145\162\166\151\143\151\157\163\040\144\145 -\040\103\145\162\164\151\146\151\143\141\143\151\157\156\040\105 -\154\145\143\164\162\157\156\151\143\141\061\045\060\043\006\011 -\052\206\110\206\367\015\001\011\001\026\026\141\143\162\141\151 -\172\100\163\165\163\143\145\162\164\145\056\147\157\142\056\166 -\145\060\036\027\015\061\060\061\062\062\070\061\066\065\061\060 -\060\132\027\015\062\060\061\062\062\065\062\063\065\071\065\071 -\132\060\201\321\061\046\060\044\006\011\052\206\110\206\367\015 -\001\011\001\026\027\143\157\156\164\141\143\164\157\100\160\162 -\157\143\145\162\164\056\156\145\164\056\166\145\061\017\060\015 -\006\003\125\004\007\023\006\103\150\141\143\141\157\061\020\060 -\016\006\003\125\004\010\023\007\115\151\162\141\156\144\141\061 -\052\060\050\006\003\125\004\013\023\041\120\162\157\166\145\145 -\144\157\162\040\144\145\040\103\145\162\164\151\146\151\143\141 -\144\157\163\040\120\122\117\103\105\122\124\061\066\060\064\006 -\003\125\004\012\023\055\123\151\163\164\145\155\141\040\116\141 -\143\151\157\156\141\154\040\144\145\040\103\145\162\164\151\146 -\151\143\141\143\151\157\156\040\105\154\145\143\164\162\157\156 -\151\143\141\061\013\060\011\006\003\125\004\006\023\002\126\105 -\061\023\060\021\006\003\125\004\003\023\012\120\123\103\120\162 -\157\143\145\162\164\060\202\002\042\060\015\006\011\052\206\110 -\206\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002 -\012\002\202\002\001\000\325\267\364\243\224\063\241\106\251\125 -\141\111\015\250\207\163\136\221\055\160\301\006\032\224\332\075 -\354\025\102\301\365\214\256\152\027\361\212\255\374\200\225\352 -\203\104\242\133\172\125\316\117\247\245\325\272\270\037\240\047 -\300\120\123\076\215\271\300\016\270\025\334\326\154\370\236\370 -\004\045\337\200\217\020\205\335\175\057\173\200\335\127\000\144 -\043\370\156\311\276\225\117\341\165\354\340\176\136\225\315\261 -\357\276\172\102\330\311\054\323\353\032\032\042\213\267\177\006 -\211\345\074\365\022\300\273\323\013\231\137\220\174\216\055\057 -\167\063\222\112\041\106\250\251\010\254\361\366\021\002\331\225 -\026\236\215\057\226\346\002\335\165\302\024\052\132\326\311\175 -\045\302\301\374\252\147\205\342\354\276\321\174\074\372\257\325 -\156\377\123\101\324\365\062\070\261\342\137\304\371\216\020\357 -\006\251\002\211\377\343\014\156\227\340\337\235\333\041\320\364 -\076\010\151\154\330\324\344\066\370\203\266\262\066\217\234\357 -\072\067\026\175\277\242\151\327\073\133\162\320\257\252\077\134 -\146\223\254\012\042\141\266\322\240\231\310\124\223\135\250\266 -\321\275\135\012\136\167\224\242\055\300\202\216\274\312\003\052 -\064\256\163\361\324\265\014\275\276\147\233\124\353\341\372\240 -\132\354\070\176\076\301\314\242\307\104\061\165\352\077\345\007 -\322\253\241\045\226\366\346\344\240\135\067\030\071\141\000\063 -\135\106\324\000\304\264\312\074\361\242\243\076\363\072\377\151 -\060\056\100\335\366\237\234\046\311\226\067\255\347\071\242\277 -\352\151\333\125\042\225\123\052\224\265\337\255\026\070\201\165 -\146\343\307\054\033\223\234\252\214\243\312\331\154\074\027\155 -\234\334\174\123\340\040\047\103\066\371\022\341\074\134\275\146 -\277\242\151\043\070\270\231\140\231\016\126\123\072\234\176\024 -\214\260\006\157\361\206\166\220\257\375\257\376\220\306\217\237 -\177\213\222\043\234\347\025\166\217\325\213\224\023\162\151\373 -\053\141\143\210\357\346\244\136\346\243\027\152\130\107\313\161 -\117\024\013\136\310\002\010\046\242\313\351\257\153\212\031\307 -\313\024\126\365\341\332\265\331\374\277\163\070\332\371\347\257 -\156\244\067\342\007\047\002\003\001\000\001\243\202\003\027\060 -\202\003\023\060\022\006\003\125\035\023\001\001\377\004\010\060 -\006\001\001\377\002\001\001\060\067\006\003\125\035\022\004\060 -\060\056\202\017\163\165\163\143\145\162\164\145\056\147\157\142 -\056\166\145\240\033\006\005\140\206\136\002\002\240\022\014\020 -\122\111\106\055\107\055\062\060\060\060\064\060\063\066\055\060 -\060\035\006\003\125\035\016\004\026\004\024\101\017\031\070\252 -\231\177\102\013\244\327\047\230\124\242\027\114\055\121\124\060 -\202\001\120\006\003\125\035\043\004\202\001\107\060\202\001\103 -\200\024\255\273\042\035\306\340\322\001\250\375\166\120\122\223 -\355\230\301\115\256\323\241\202\001\046\244\202\001\042\060\202 -\001\036\061\076\060\074\006\003\125\004\003\023\065\101\165\164 -\157\162\151\144\141\144\040\144\145\040\103\145\162\164\151\146 -\151\143\141\143\151\157\156\040\122\141\151\172\040\144\145\154 -\040\105\163\164\141\144\157\040\126\145\156\145\172\157\154\141 -\156\157\061\013\060\011\006\003\125\004\006\023\002\126\105\061 -\020\060\016\006\003\125\004\007\023\007\103\141\162\141\143\141 -\163\061\031\060\027\006\003\125\004\010\023\020\104\151\163\164 -\162\151\164\157\040\103\141\160\151\164\141\154\061\066\060\064 -\006\003\125\004\012\023\055\123\151\163\164\145\155\141\040\116 -\141\143\151\157\156\141\154\040\144\145\040\103\145\162\164\151 -\146\151\143\141\143\151\157\156\040\105\154\145\143\164\162\157 -\156\151\143\141\061\103\060\101\006\003\125\004\013\023\072\123 -\165\160\145\162\151\156\164\145\156\144\145\156\143\151\141\040 -\144\145\040\123\145\162\166\151\143\151\157\163\040\144\145\040 -\103\145\162\164\151\146\151\143\141\143\151\157\156\040\105\154 -\145\143\164\162\157\156\151\143\141\061\045\060\043\006\011\052 -\206\110\206\367\015\001\011\001\026\026\141\143\162\141\151\172 -\100\163\165\163\143\145\162\164\145\056\147\157\142\056\166\145 -\202\001\012\060\016\006\003\125\035\017\001\001\377\004\004\003 -\002\001\006\060\115\006\003\125\035\021\004\106\060\104\202\016 -\160\162\157\143\145\162\164\056\156\145\164\056\166\145\240\025 -\006\005\140\206\136\002\001\240\014\014\012\120\123\103\055\060 -\060\060\060\060\062\240\033\006\005\140\206\136\002\002\240\022 -\014\020\122\111\106\055\112\055\063\061\066\063\065\063\067\063 -\055\067\060\166\006\003\125\035\037\004\157\060\155\060\106\240 -\104\240\102\206\100\150\164\164\160\072\057\057\167\167\167\056 -\163\165\163\143\145\162\164\145\056\147\157\142\056\166\145\057 -\154\143\162\057\103\105\122\124\111\106\111\103\101\104\117\055 -\122\101\111\132\055\123\110\101\063\070\064\103\122\114\104\105 -\122\056\143\162\154\060\043\240\041\240\037\206\035\154\144\141 -\160\072\057\057\141\143\162\141\151\172\056\163\165\163\143\145 -\162\164\145\056\147\157\142\056\166\145\060\067\006\010\053\006 -\001\005\005\007\001\001\004\053\060\051\060\047\006\010\053\006 -\001\005\005\007\060\001\206\033\150\164\164\160\072\057\057\157 -\143\163\160\056\163\165\163\143\145\162\164\145\056\147\157\142 -\056\166\145\060\101\006\003\125\035\040\004\072\060\070\060\066 -\006\006\140\206\136\003\001\002\060\054\060\052\006\010\053\006 -\001\005\005\007\002\001\026\036\150\164\164\160\072\057\057\167 -\167\167\056\163\165\163\143\145\162\164\145\056\147\157\142\056 -\166\145\057\144\160\143\060\015\006\011\052\206\110\206\367\015 -\001\001\013\005\000\003\202\002\001\000\053\131\353\042\231\273 -\204\252\117\336\220\306\321\206\161\043\236\113\003\221\107\160 -\273\300\222\140\354\340\324\347\155\306\323\355\147\203\167\122 -\325\362\345\167\247\066\262\343\124\276\331\273\012\233\021\357 -\141\364\306\231\063\231\365\257\000\071\215\203\277\246\275\065 -\176\054\134\061\064\157\154\333\363\144\001\230\252\224\054\101 -\335\025\206\312\153\051\116\026\300\111\374\327\203\110\023\007 -\121\204\061\122\210\273\206\027\307\153\057\212\040\255\305\013 -\217\160\076\052\273\033\161\217\271\244\240\375\330\225\331\257 -\131\277\045\053\230\351\143\223\057\140\036\304\252\370\167\365 -\213\154\057\355\176\056\265\117\100\015\356\274\127\167\347\331 -\266\324\077\225\047\072\040\325\345\256\253\154\065\237\301\241 -\035\131\334\204\201\356\115\007\342\110\266\236\113\225\055\101 -\261\341\350\336\176\057\005\036\150\356\277\273\220\145\072\310 -\356\352\261\030\067\034\142\223\244\240\061\354\161\154\221\346 -\244\171\211\132\024\247\024\120\005\114\244\000\127\060\054\301 -\265\141\226\334\076\036\204\257\071\102\317\345\320\054\261\044 -\274\337\100\303\355\177\143\112\275\341\117\022\144\206\225\363 -\260\347\310\267\341\123\275\222\346\363\014\226\271\353\350\346 -\222\355\247\201\011\024\013\374\225\172\317\217\326\064\117\066 -\022\334\136\321\064\165\306\106\200\057\225\004\214\307\206\304 -\250\046\211\250\077\031\233\201\273\121\244\112\206\253\013\021 -\017\261\256\143\123\155\050\352\335\063\126\070\034\262\255\200 -\323\327\162\275\232\154\231\143\350\000\273\101\166\005\267\133 -\231\030\212\303\270\022\134\126\317\126\014\175\350\342\317\355 -\274\164\107\373\356\323\027\116\042\117\126\377\120\363\056\346 -\071\246\202\326\161\312\336\267\325\272\150\010\355\231\314\375 -\242\222\313\151\270\235\371\012\244\246\076\117\223\050\052\141 -\154\007\046\000\377\226\137\150\206\270\270\316\312\125\340\253 -\261\075\177\230\327\063\016\132\075\330\170\302\304\140\057\307 -\142\360\141\221\322\070\260\366\236\125\333\100\200\005\022\063 -\316\035\222\233\321\151\263\377\277\361\222\012\141\065\077\335 -\376\206\364\274\340\032\161\263\142\246 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for "PSCProcert" -# Issuer: E=acraiz@suscerte.gob.ve,OU=Superintendencia de Servicios de Certificacion Electronica,O=Sistema Nacional de Certificacion Electronica,ST=Distrito Capital,L=Caracas,C=VE,CN=Autoridad de Certificacion Raiz del Estado Venezolano -# Serial Number: 11 (0xb) -# Subject: CN=PSCProcert,C=VE,O=Sistema Nacional de Certificacion Electronica,OU=Proveedor de Certificados PROCERT,ST=Miranda,L=Chacao,E=contacto@procert.net.ve -# Not Valid Before: Tue Dec 28 16:51:00 2010 -# Not Valid After : Fri Dec 25 23:59:59 2020 -# Fingerprint (MD5): E6:24:E9:12:01:AE:0C:DE:8E:85:C4:CE:A3:12:DD:EC -# Fingerprint (SHA1): 70:C1:8D:74:B4:28:81:0A:E4:FD:A5:75:D7:01:9F:99:B0:3D:50:74 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "PSCProcert" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\160\301\215\164\264\050\201\012\344\375\245\165\327\001\237\231 -\260\075\120\164 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\346\044\351\022\001\256\014\336\216\205\304\316\243\022\335\354 -END -CKA_ISSUER MULTILINE_OCTAL -\060\202\001\036\061\076\060\074\006\003\125\004\003\023\065\101 -\165\164\157\162\151\144\141\144\040\144\145\040\103\145\162\164 -\151\146\151\143\141\143\151\157\156\040\122\141\151\172\040\144 -\145\154\040\105\163\164\141\144\157\040\126\145\156\145\172\157 -\154\141\156\157\061\013\060\011\006\003\125\004\006\023\002\126 -\105\061\020\060\016\006\003\125\004\007\023\007\103\141\162\141 -\143\141\163\061\031\060\027\006\003\125\004\010\023\020\104\151 -\163\164\162\151\164\157\040\103\141\160\151\164\141\154\061\066 -\060\064\006\003\125\004\012\023\055\123\151\163\164\145\155\141 -\040\116\141\143\151\157\156\141\154\040\144\145\040\103\145\162 -\164\151\146\151\143\141\143\151\157\156\040\105\154\145\143\164 -\162\157\156\151\143\141\061\103\060\101\006\003\125\004\013\023 -\072\123\165\160\145\162\151\156\164\145\156\144\145\156\143\151 -\141\040\144\145\040\123\145\162\166\151\143\151\157\163\040\144 -\145\040\103\145\162\164\151\146\151\143\141\143\151\157\156\040 -\105\154\145\143\164\162\157\156\151\143\141\061\045\060\043\006 -\011\052\206\110\206\367\015\001\011\001\026\026\141\143\162\141 -\151\172\100\163\165\163\143\145\162\164\145\056\147\157\142\056 -\166\145 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\001\013 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "Swisscom Root CA 2" # @@ -21316,333 +19663,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "WoSign" -# -# Issuer: CN=Certification Authority of WoSign,O=WoSign CA Limited,C=CN -# Serial Number:5e:68:d6:11:71:94:63:50:56:00:68:f3:3e:c9:c5:91 -# Subject: CN=Certification Authority of WoSign,O=WoSign CA Limited,C=CN -# Not Valid Before: Sat Aug 08 01:00:01 2009 -# Not Valid After : Mon Aug 08 01:00:01 2039 -# Fingerprint (SHA-256): 4B:22:D5:A6:AE:C9:9F:3C:DB:79:AA:5E:C0:68:38:47:9C:D5:EC:BA:71:64:F7:F2:2D:C1:D6:5F:63:D8:57:08 -# Fingerprint (SHA1): B9:42:94:BF:91:EA:8F:B6:4B:E6:10:97:C7:FB:00:13:59:B6:76:CB -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "WoSign" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\125\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\052\060\050\006 -\003\125\004\003\023\041\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\040\157\146 -\040\127\157\123\151\147\156 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\125\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\052\060\050\006 -\003\125\004\003\023\041\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\040\157\146 -\040\127\157\123\151\147\156 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\136\150\326\021\161\224\143\120\126\000\150\363\076\311 -\305\221 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\166\060\202\003\136\240\003\002\001\002\002\020\136 -\150\326\021\161\224\143\120\126\000\150\363\076\311\305\221\060 -\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\125 -\061\013\060\011\006\003\125\004\006\023\002\103\116\061\032\060 -\030\006\003\125\004\012\023\021\127\157\123\151\147\156\040\103 -\101\040\114\151\155\151\164\145\144\061\052\060\050\006\003\125 -\004\003\023\041\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\040\157\146\040\127 -\157\123\151\147\156\060\036\027\015\060\071\060\070\060\070\060 -\061\060\060\060\061\132\027\015\063\071\060\070\060\070\060\061 -\060\060\060\061\132\060\125\061\013\060\011\006\003\125\004\006 -\023\002\103\116\061\032\060\030\006\003\125\004\012\023\021\127 -\157\123\151\147\156\040\103\101\040\114\151\155\151\164\145\144 -\061\052\060\050\006\003\125\004\003\023\041\103\145\162\164\151 -\146\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151 -\164\171\040\157\146\040\127\157\123\151\147\156\060\202\002\042 -\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003 -\202\002\017\000\060\202\002\012\002\202\002\001\000\275\312\215 -\254\270\221\025\126\227\173\153\134\172\302\336\153\331\241\260 -\303\020\043\372\247\241\262\314\061\372\076\331\246\051\157\026 -\075\340\153\370\270\100\137\333\071\250\000\172\213\240\115\124 -\175\302\042\170\374\216\011\270\250\205\327\314\225\227\113\164 -\330\236\176\360\000\344\016\211\256\111\050\104\032\020\231\062 -\017\045\210\123\244\015\263\017\022\010\026\013\003\161\047\034 -\177\341\333\322\375\147\150\304\005\135\012\016\135\160\327\330 -\227\240\274\123\101\232\221\215\364\236\066\146\172\176\126\301 -\220\137\346\261\150\040\066\244\214\044\054\054\107\013\131\166 -\146\060\265\276\336\355\217\370\235\323\273\001\060\346\362\363 -\016\340\054\222\200\363\205\371\050\212\264\124\056\232\355\367 -\166\374\025\150\026\353\112\154\353\056\022\217\324\317\376\014 -\307\134\035\013\176\005\062\276\136\260\011\052\102\325\311\116 -\220\263\131\015\273\172\176\315\325\010\132\264\177\330\034\151 -\021\371\047\017\173\006\257\124\203\030\173\341\335\124\172\121 -\150\156\167\374\306\277\122\112\146\106\241\262\147\032\273\243 -\117\167\240\276\135\377\374\126\013\103\162\167\220\312\236\371 -\362\071\365\015\251\364\352\327\347\263\020\057\060\102\067\041 -\314\060\160\311\206\230\017\314\130\115\203\273\175\345\032\245 -\067\215\266\254\062\227\000\072\143\161\044\036\236\067\304\377 -\164\324\067\300\342\376\210\106\140\021\335\010\077\120\066\253 -\270\172\244\225\142\152\156\260\312\152\041\132\151\363\363\373 -\035\160\071\225\363\247\156\246\201\211\241\210\305\073\161\312 -\243\122\356\203\273\375\240\167\364\344\157\347\102\333\155\112 -\231\212\064\110\274\027\334\344\200\010\042\266\362\061\300\077 -\004\076\353\237\040\171\326\270\006\144\144\002\061\327\251\315 -\122\373\204\105\151\011\000\052\334\125\213\304\006\106\113\300 -\112\035\011\133\071\050\375\251\253\316\000\371\056\110\113\046 -\346\060\114\245\130\312\264\104\202\117\347\221\036\063\303\260 -\223\377\021\374\201\322\312\037\161\051\335\166\117\222\045\257 -\035\201\267\017\057\214\303\006\314\057\047\243\112\344\016\231 -\272\174\036\105\037\177\252\031\105\226\375\374\075\002\003\001 -\000\001\243\102\060\100\060\016\006\003\125\035\017\001\001\377 -\004\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377 -\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026 -\004\024\341\146\317\016\321\361\263\113\267\006\040\024\376\207 -\022\325\366\376\373\076\060\015\006\011\052\206\110\206\367\015 -\001\001\005\005\000\003\202\002\001\000\250\313\162\100\262\166 -\301\176\173\374\255\144\343\062\173\314\074\266\135\106\323\365 -\054\342\160\135\310\056\330\006\175\230\321\013\041\240\211\131 -\044\001\235\371\257\011\175\012\043\202\064\325\374\174\162\231 -\271\243\327\124\364\352\122\160\016\305\365\326\073\341\072\011 -\062\346\041\071\223\275\263\025\352\117\152\364\365\213\077\057 -\174\215\130\056\305\341\071\240\076\307\075\112\163\236\100\172 -\300\053\141\251\147\311\363\044\271\263\155\125\054\132\035\236 -\045\162\316\013\255\252\307\125\142\013\276\373\143\263\141\104 -\043\243\313\341\032\016\367\232\006\115\336\324\043\116\041\226 -\133\071\133\127\035\057\135\010\136\011\171\377\174\227\265\115 -\203\256\015\326\346\243\171\340\063\320\231\226\002\060\247\076 -\377\322\243\103\077\005\132\006\352\104\002\332\174\370\110\320 -\063\251\371\007\307\225\341\365\076\365\135\161\272\362\225\251 -\164\210\141\131\343\277\312\132\023\272\162\264\214\135\066\207 -\351\246\305\074\023\277\336\320\104\046\356\267\354\056\160\372 -\327\235\267\254\345\305\100\132\346\327\154\173\054\303\126\233 -\107\315\013\316\372\033\264\041\327\267\146\270\364\045\060\213 -\134\015\271\352\147\262\364\155\256\325\241\236\117\330\237\351 -\047\002\260\035\006\326\217\343\373\110\022\237\177\021\241\020 -\076\114\121\072\226\260\321\023\361\307\330\046\256\072\312\221 -\304\151\235\337\001\051\144\121\157\150\332\024\354\010\101\227 -\220\215\320\262\200\362\317\302\075\277\221\150\305\200\147\036 -\304\140\023\125\325\141\231\127\174\272\225\017\141\111\072\312 -\165\274\311\012\223\077\147\016\022\362\050\342\061\033\300\127 -\026\337\010\174\031\301\176\017\037\205\036\012\066\174\133\176 -\047\274\172\277\340\333\364\332\122\275\336\014\124\160\061\221 -\103\225\310\274\360\076\335\011\176\060\144\120\355\177\001\244 -\063\147\115\150\117\276\025\357\260\366\002\021\242\033\023\045 -\072\334\302\131\361\343\134\106\273\147\054\002\106\352\036\110 -\246\346\133\331\265\274\121\242\222\226\333\252\306\067\042\246 -\376\314\040\164\243\055\251\056\153\313\300\202\021\041\265\223 -\171\356\104\206\276\327\036\344\036\373 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for "WoSign" -# Issuer: CN=Certification Authority of WoSign,O=WoSign CA Limited,C=CN -# Serial Number:5e:68:d6:11:71:94:63:50:56:00:68:f3:3e:c9:c5:91 -# Subject: CN=Certification Authority of WoSign,O=WoSign CA Limited,C=CN -# Not Valid Before: Sat Aug 08 01:00:01 2009 -# Not Valid After : Mon Aug 08 01:00:01 2039 -# Fingerprint (SHA-256): 4B:22:D5:A6:AE:C9:9F:3C:DB:79:AA:5E:C0:68:38:47:9C:D5:EC:BA:71:64:F7:F2:2D:C1:D6:5F:63:D8:57:08 -# Fingerprint (SHA1): B9:42:94:BF:91:EA:8F:B6:4B:E6:10:97:C7:FB:00:13:59:B6:76:CB -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "WoSign" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\271\102\224\277\221\352\217\266\113\346\020\227\307\373\000\023 -\131\266\166\313 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\241\362\371\265\322\310\172\164\270\363\005\361\327\341\204\215 -END -CKA_ISSUER MULTILINE_OCTAL -\060\125\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\052\060\050\006 -\003\125\004\003\023\041\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\040\157\146 -\040\127\157\123\151\147\156 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\136\150\326\021\161\224\143\120\126\000\150\363\076\311 -\305\221 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "WoSign China" -# -# Issuer: CN=CA ...............,O=WoSign CA Limited,C=CN -# Serial Number:50:70:6b:cd:d8:13:fc:1b:4e:3b:33:72:d2:11:48:8d -# Subject: CN=CA ...............,O=WoSign CA Limited,C=CN -# Not Valid Before: Sat Aug 08 01:00:01 2009 -# Not Valid After : Mon Aug 08 01:00:01 2039 -# Fingerprint (SHA-256): D6:F0:34:BD:94:AA:23:3F:02:97:EC:A4:24:5B:28:39:73:E4:47:AA:59:0F:31:0C:77:F4:8F:DF:83:11:22:54 -# Fingerprint (SHA1): 16:32:47:8D:89:F9:21:3A:92:00:85:63:F5:A4:A7:D3:12:40:8A:D6 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "WoSign China" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\033\060\031\006 -\003\125\004\003\014\022\103\101\040\346\262\203\351\200\232\346 -\240\271\350\257\201\344\271\246 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\033\060\031\006 -\003\125\004\003\014\022\103\101\040\346\262\203\351\200\232\346 -\240\271\350\257\201\344\271\246 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\120\160\153\315\330\023\374\033\116\073\063\162\322\021 -\110\215 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\005\130\060\202\003\100\240\003\002\001\002\002\020\120 -\160\153\315\330\023\374\033\116\073\063\162\322\021\110\215\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\106 -\061\013\060\011\006\003\125\004\006\023\002\103\116\061\032\060 -\030\006\003\125\004\012\023\021\127\157\123\151\147\156\040\103 -\101\040\114\151\155\151\164\145\144\061\033\060\031\006\003\125 -\004\003\014\022\103\101\040\346\262\203\351\200\232\346\240\271 -\350\257\201\344\271\246\060\036\027\015\060\071\060\070\060\070 -\060\061\060\060\060\061\132\027\015\063\071\060\070\060\070\060 -\061\060\060\060\061\132\060\106\061\013\060\011\006\003\125\004 -\006\023\002\103\116\061\032\060\030\006\003\125\004\012\023\021 -\127\157\123\151\147\156\040\103\101\040\114\151\155\151\164\145 -\144\061\033\060\031\006\003\125\004\003\014\022\103\101\040\346 -\262\203\351\200\232\346\240\271\350\257\201\344\271\246\060\202 -\002\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005 -\000\003\202\002\017\000\060\202\002\012\002\202\002\001\000\320 -\111\041\036\045\374\207\301\052\302\254\333\166\206\006\116\347 -\320\164\064\334\355\145\065\374\120\326\210\077\244\360\177\353 -\017\137\171\057\211\261\375\274\143\130\067\223\233\070\370\267 -\133\251\372\330\161\307\264\274\200\227\215\154\113\361\120\325 -\052\051\252\250\031\172\226\346\225\216\164\355\227\012\127\165 -\364\005\333\155\013\071\271\001\177\252\366\326\332\154\346\005 -\340\244\115\122\374\333\320\164\267\021\214\173\215\117\377\207 -\203\256\377\005\003\023\127\120\067\376\214\226\122\020\114\137 -\277\224\161\151\331\226\076\014\103\117\276\060\300\237\071\164 -\117\006\105\135\243\326\126\071\150\007\314\207\117\120\167\223 -\161\331\104\010\261\212\064\351\211\254\333\233\116\341\331\344 -\122\105\214\056\024\037\221\153\031\035\150\051\054\126\304\342 -\036\023\127\144\360\141\343\271\021\337\260\341\127\240\033\255 -\327\137\321\257\333\053\055\077\320\150\216\017\352\237\017\213 -\065\130\033\023\034\364\336\065\241\012\135\326\352\337\022\157 -\300\373\151\007\106\162\334\201\366\004\043\027\340\115\165\341 -\162\157\260\050\353\233\341\341\203\241\237\112\135\257\314\233 -\372\002\040\266\030\142\167\221\073\243\325\145\255\334\174\220 -\167\034\104\101\244\112\213\353\225\162\351\366\011\144\334\250 -\055\237\164\170\350\301\242\011\143\234\357\240\333\117\235\225 -\253\040\117\267\260\367\207\134\246\240\344\067\070\307\134\343 -\065\017\054\255\243\200\242\354\056\135\300\317\355\213\005\302 -\346\163\156\366\211\325\365\322\106\216\352\155\143\033\036\212 -\311\175\246\370\234\353\345\325\143\205\115\163\146\151\021\376 -\310\016\364\301\307\146\111\123\176\344\031\153\361\351\172\131 -\243\155\176\305\027\346\047\306\357\033\333\157\374\015\115\006 -\001\264\016\134\060\106\125\140\257\070\145\072\312\107\272\254 -\054\314\106\037\262\106\226\077\363\355\046\005\356\167\241\152 -\153\176\055\155\130\134\112\324\216\147\270\361\332\325\106\212 -\047\371\021\362\311\102\376\116\336\337\037\134\304\244\206\207 -\026\063\241\247\027\030\245\015\344\005\345\053\302\053\013\242 -\225\220\271\375\140\074\116\211\076\347\234\356\037\273\001\002 -\003\001\000\001\243\102\060\100\060\016\006\003\125\035\017\001 -\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023\001 -\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035\016 -\004\026\004\024\340\115\277\334\233\101\135\023\350\144\360\247 -\351\025\244\341\201\301\272\061\060\015\006\011\052\206\110\206 -\367\015\001\001\013\005\000\003\202\002\001\000\152\212\160\070 -\131\266\332\213\030\310\276\052\323\266\031\325\146\051\172\135 -\315\133\057\163\034\046\116\243\175\157\253\267\051\115\246\351 -\245\021\203\247\071\163\257\020\104\222\346\045\135\117\141\372 -\310\006\276\116\113\357\376\363\061\376\306\174\160\012\101\130 -\332\350\231\113\226\311\170\274\230\174\002\051\355\011\200\346 -\012\072\202\002\052\342\311\057\310\126\031\046\356\170\034\043 -\375\367\223\145\116\347\363\230\230\257\315\335\331\236\100\210 -\061\050\072\253\056\013\260\254\014\044\372\172\046\230\363\022 -\141\020\364\135\027\367\176\342\170\227\124\342\214\350\051\272 -\214\020\062\275\335\063\153\070\206\176\071\075\016\003\162\247 -\135\171\217\105\212\131\256\133\041\156\061\106\325\131\215\317 -\025\137\335\061\045\317\333\140\326\201\104\162\051\002\127\366 -\226\324\326\377\352\051\333\071\305\270\054\212\032\215\316\313 -\347\102\061\206\005\150\016\236\024\335\000\220\272\151\105\010 -\333\156\220\201\206\247\052\005\077\346\204\071\370\267\371\127 -\137\114\244\171\132\020\014\136\325\153\377\065\137\005\121\036 -\154\243\165\251\317\120\203\323\174\364\146\367\202\215\075\014 -\175\350\337\173\250\016\033\054\234\256\100\160\207\332\355\247 -\026\202\132\276\065\154\040\116\042\141\331\274\121\172\315\172 -\141\334\113\021\371\376\147\064\317\056\004\146\141\134\127\227 -\043\214\363\206\033\110\337\052\257\247\301\377\330\216\076\003 -\273\330\052\260\372\024\045\262\121\153\206\103\205\056\007\043 -\026\200\215\114\373\264\143\073\314\303\164\355\033\243\036\376 -\065\017\137\174\035\026\206\365\016\303\225\361\057\257\135\045 -\073\121\346\327\166\101\070\321\113\003\071\050\245\036\221\162 -\324\175\253\227\063\304\323\076\340\151\266\050\171\240\011\215 -\034\321\377\101\162\110\006\374\232\056\347\040\371\233\242\336 -\211\355\256\074\011\257\312\127\263\222\211\160\100\344\057\117 -\302\160\203\100\327\044\054\153\347\011\037\323\325\307\301\010 -\364\333\016\073\034\007\013\103\021\204\041\206\351\200\324\165 -\330\253\361\002\142\301\261\176\125\141\317\023\327\046\260\327 -\234\313\051\213\070\112\013\016\220\215\272\241 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for "WoSign China" -# Issuer: CN=CA ...............,O=WoSign CA Limited,C=CN -# Serial Number:50:70:6b:cd:d8:13:fc:1b:4e:3b:33:72:d2:11:48:8d -# Subject: CN=CA ...............,O=WoSign CA Limited,C=CN -# Not Valid Before: Sat Aug 08 01:00:01 2009 -# Not Valid After : Mon Aug 08 01:00:01 2039 -# Fingerprint (SHA-256): D6:F0:34:BD:94:AA:23:3F:02:97:EC:A4:24:5B:28:39:73:E4:47:AA:59:0F:31:0C:77:F4:8F:DF:83:11:22:54 -# Fingerprint (SHA1): 16:32:47:8D:89:F9:21:3A:92:00:85:63:F5:A4:A7:D3:12:40:8A:D6 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "WoSign China" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\026\062\107\215\211\371\041\072\222\000\205\143\365\244\247\323 -\022\100\212\326 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\170\203\133\122\026\166\304\044\073\203\170\350\254\332\232\223 -END -CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\033\060\031\006 -\003\125\004\003\014\022\103\101\040\346\262\203\351\200\232\346 -\240\271\350\257\201\344\271\246 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\120\160\153\315\330\023\374\033\116\073\063\162\322\021 -\110\215 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "COMODO RSA Certification Authority" # @@ -24428,248 +22448,6 @@ CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE -# -# Certificate "Certification Authority of WoSign G2" -# -# Issuer: CN=Certification Authority of WoSign G2,O=WoSign CA Limited,C=CN -# Serial Number:6b:25:da:8a:88:9d:7c:bc:0f:05:b3:b1:7a:61:45:44 -# Subject: CN=Certification Authority of WoSign G2,O=WoSign CA Limited,C=CN -# Not Valid Before: Sat Nov 08 00:58:58 2014 -# Not Valid After : Tue Nov 08 00:58:58 2044 -# Fingerprint (SHA-256): D4:87:A5:6F:83:B0:74:82:E8:5E:96:33:94:C1:EC:C2:C9:E5:1D:09:03:EE:94:6B:02:C3:01:58:1E:D9:9E:16 -# Fingerprint (SHA1): FB:ED:DC:90:65:B7:27:20:37:BC:55:0C:9C:56:DE:BB:F2:78:94:E1 -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certification Authority of WoSign G2" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\130\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\055\060\053\006 -\003\125\004\003\023\044\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\040\157\146 -\040\127\157\123\151\147\156\040\107\062 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\130\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\055\060\053\006 -\003\125\004\003\023\044\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\040\157\146 -\040\127\157\123\151\147\156\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\153\045\332\212\210\235\174\274\017\005\263\261\172\141 -\105\104 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\003\174\060\202\002\144\240\003\002\001\002\002\020\153 -\045\332\212\210\235\174\274\017\005\263\261\172\141\105\104\060 -\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\130 -\061\013\060\011\006\003\125\004\006\023\002\103\116\061\032\060 -\030\006\003\125\004\012\023\021\127\157\123\151\147\156\040\103 -\101\040\114\151\155\151\164\145\144\061\055\060\053\006\003\125 -\004\003\023\044\103\145\162\164\151\146\151\143\141\164\151\157 -\156\040\101\165\164\150\157\162\151\164\171\040\157\146\040\127 -\157\123\151\147\156\040\107\062\060\036\027\015\061\064\061\061 -\060\070\060\060\065\070\065\070\132\027\015\064\064\061\061\060 -\070\060\060\065\070\065\070\132\060\130\061\013\060\011\006\003 -\125\004\006\023\002\103\116\061\032\060\030\006\003\125\004\012 -\023\021\127\157\123\151\147\156\040\103\101\040\114\151\155\151 -\164\145\144\061\055\060\053\006\003\125\004\003\023\044\103\145 -\162\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150 -\157\162\151\164\171\040\157\146\040\127\157\123\151\147\156\040 -\107\062\060\202\001\042\060\015\006\011\052\206\110\206\367\015 -\001\001\001\005\000\003\202\001\017\000\060\202\001\012\002\202 -\001\001\000\276\305\304\240\042\200\111\117\277\331\207\021\306 -\123\341\273\017\275\140\177\257\366\202\016\037\334\260\216\075 -\227\340\120\074\217\072\357\146\073\105\007\233\040\370\343\327 -\045\206\065\220\026\242\135\157\060\031\010\207\013\177\006\262 -\235\142\217\336\257\222\245\140\324\053\200\232\122\077\365\232 -\203\351\064\132\313\331\325\142\134\346\016\340\337\006\230\016 -\200\174\312\264\035\023\210\153\016\250\044\167\003\320\356\133 -\363\312\151\221\065\071\126\305\155\343\367\075\117\136\223\070 -\044\312\030\351\044\313\222\003\335\314\034\075\011\160\344\040 -\344\361\256\254\273\163\151\243\143\072\017\105\017\241\112\232 -\302\321\143\254\313\020\370\075\346\116\050\267\353\304\225\261 -\254\375\136\253\372\101\313\135\235\113\334\364\174\166\357\147 -\177\000\172\215\322\240\032\134\115\042\341\265\332\335\166\263 -\324\166\337\136\270\213\230\310\024\124\314\153\027\222\267\340 -\112\277\111\224\141\013\070\220\217\135\044\154\045\173\073\171 -\331\342\176\235\255\237\230\241\006\374\170\024\140\127\370\356 -\200\167\261\002\003\001\000\001\243\102\060\100\060\016\006\003 -\125\035\017\001\001\377\004\004\003\002\001\006\060\017\006\003 -\125\035\023\001\001\377\004\005\060\003\001\001\377\060\035\006 -\003\125\035\016\004\026\004\024\372\140\251\353\145\305\335\026 -\024\010\116\014\017\215\233\340\367\144\257\147\060\015\006\011 -\052\206\110\206\367\015\001\001\013\005\000\003\202\001\001\000 -\127\303\172\066\202\234\215\230\342\253\100\252\107\217\307\247 -\133\355\174\347\075\146\132\073\061\273\337\363\026\063\221\374 -\174\173\245\302\246\146\343\252\260\267\047\230\077\111\327\140 -\147\147\077\066\117\112\313\361\024\372\132\207\050\034\355\217 -\101\062\306\225\371\175\332\275\173\133\302\260\041\343\217\106 -\334\041\070\103\164\114\373\060\370\027\162\301\062\374\310\221 -\027\304\314\130\067\116\013\314\132\367\041\065\050\203\154\140 -\055\104\353\122\214\120\075\265\154\022\327\372\011\273\154\262 -\112\261\305\211\344\374\323\122\330\141\027\376\172\224\204\217 -\171\266\063\131\272\017\304\013\342\160\240\113\170\056\372\310 -\237\375\257\221\145\012\170\070\025\345\227\027\024\335\371\340 -\054\064\370\070\320\204\042\000\300\024\121\030\053\002\334\060 -\132\360\350\001\174\065\072\043\257\010\344\257\252\216\050\102 -\111\056\360\365\231\064\276\355\017\113\030\341\322\044\074\273 -\135\107\267\041\362\215\321\012\231\216\343\156\076\255\160\340 -\217\271\312\314\156\201\061\366\173\234\172\171\344\147\161\030 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for "Certification Authority of WoSign G2" -# Issuer: CN=Certification Authority of WoSign G2,O=WoSign CA Limited,C=CN -# Serial Number:6b:25:da:8a:88:9d:7c:bc:0f:05:b3:b1:7a:61:45:44 -# Subject: CN=Certification Authority of WoSign G2,O=WoSign CA Limited,C=CN -# Not Valid Before: Sat Nov 08 00:58:58 2014 -# Not Valid After : Tue Nov 08 00:58:58 2044 -# Fingerprint (SHA-256): D4:87:A5:6F:83:B0:74:82:E8:5E:96:33:94:C1:EC:C2:C9:E5:1D:09:03:EE:94:6B:02:C3:01:58:1E:D9:9E:16 -# Fingerprint (SHA1): FB:ED:DC:90:65:B7:27:20:37:BC:55:0C:9C:56:DE:BB:F2:78:94:E1 -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "Certification Authority of WoSign G2" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\373\355\334\220\145\267\047\040\067\274\125\014\234\126\336\273 -\362\170\224\341 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\310\034\175\031\252\313\161\223\362\120\370\122\250\036\272\140 -END -CKA_ISSUER MULTILINE_OCTAL -\060\130\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\055\060\053\006 -\003\125\004\003\023\044\103\145\162\164\151\146\151\143\141\164 -\151\157\156\040\101\165\164\150\157\162\151\164\171\040\157\146 -\040\127\157\123\151\147\156\040\107\062 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\153\045\332\212\210\235\174\274\017\005\263\261\172\141 -\105\104 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - -# -# Certificate "CA WoSign ECC Root" -# -# Issuer: CN=CA WoSign ECC Root,O=WoSign CA Limited,C=CN -# Serial Number:68:4a:58:70:80:6b:f0:8f:02:fa:f6:de:e8:b0:90:90 -# Subject: CN=CA WoSign ECC Root,O=WoSign CA Limited,C=CN -# Not Valid Before: Sat Nov 08 00:58:58 2014 -# Not Valid After : Tue Nov 08 00:58:58 2044 -# Fingerprint (SHA-256): 8B:45:DA:1C:06:F7:91:EB:0C:AB:F2:6B:E5:88:F5:FB:23:16:5C:2E:61:4B:F8:85:56:2D:0D:CE:50:B2:9B:02 -# Fingerprint (SHA1): D2:7A:D2:BE:ED:94:C0:A1:3C:C7:25:21:EA:5D:71:BE:81:19:F3:2B -CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CA WoSign ECC Root" -CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 -CKA_SUBJECT MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\033\060\031\006 -\003\125\004\003\023\022\103\101\040\127\157\123\151\147\156\040 -\105\103\103\040\122\157\157\164 -END -CKA_ID UTF8 "0" -CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\033\060\031\006 -\003\125\004\003\023\022\103\101\040\127\157\123\151\147\156\040 -\105\103\103\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\150\112\130\160\200\153\360\217\002\372\366\336\350\260 -\220\220 -END -CKA_VALUE MULTILINE_OCTAL -\060\202\002\011\060\202\001\217\240\003\002\001\002\002\020\150 -\112\130\160\200\153\360\217\002\372\366\336\350\260\220\220\060 -\012\006\010\052\206\110\316\075\004\003\003\060\106\061\013\060 -\011\006\003\125\004\006\023\002\103\116\061\032\060\030\006\003 -\125\004\012\023\021\127\157\123\151\147\156\040\103\101\040\114 -\151\155\151\164\145\144\061\033\060\031\006\003\125\004\003\023 -\022\103\101\040\127\157\123\151\147\156\040\105\103\103\040\122 -\157\157\164\060\036\027\015\061\064\061\061\060\070\060\060\065 -\070\065\070\132\027\015\064\064\061\061\060\070\060\060\065\070 -\065\070\132\060\106\061\013\060\011\006\003\125\004\006\023\002 -\103\116\061\032\060\030\006\003\125\004\012\023\021\127\157\123 -\151\147\156\040\103\101\040\114\151\155\151\164\145\144\061\033 -\060\031\006\003\125\004\003\023\022\103\101\040\127\157\123\151 -\147\156\040\105\103\103\040\122\157\157\164\060\166\060\020\006 -\007\052\206\110\316\075\002\001\006\005\053\201\004\000\042\003 -\142\000\004\341\375\216\270\103\044\253\226\173\205\302\272\013 -\255\215\340\072\343\044\271\322\261\276\210\072\312\277\112\270 -\371\357\054\057\257\121\120\074\107\165\154\370\224\267\233\374 -\050\036\305\124\314\143\235\026\113\123\301\347\040\253\315\254 -\045\322\177\217\302\301\132\202\136\060\213\172\124\316\003\265 -\221\177\252\224\320\321\212\110\314\202\005\046\241\325\121\022 -\326\173\066\243\102\060\100\060\016\006\003\125\035\017\001\001 -\377\004\004\003\002\001\006\060\017\006\003\125\035\023\001\001 -\377\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004 -\026\004\024\252\375\325\132\243\366\207\213\062\205\375\321\062 -\133\200\105\223\363\003\270\060\012\006\010\052\206\110\316\075 -\004\003\003\003\150\000\060\145\002\061\000\344\244\204\260\201 -\325\075\260\164\254\224\244\350\016\075\000\164\114\241\227\153 -\371\015\121\074\241\331\073\364\015\253\251\237\276\116\162\312 -\205\324\331\354\265\062\105\030\157\253\255\002\060\175\307\367 -\151\143\057\241\341\230\357\023\020\321\171\077\321\376\352\073 -\177\336\126\364\220\261\025\021\330\262\042\025\320\057\303\046 -\056\153\361\221\262\220\145\364\232\346\220\356\112 -END -CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE - -# Trust for "CA WoSign ECC Root" -# Issuer: CN=CA WoSign ECC Root,O=WoSign CA Limited,C=CN -# Serial Number:68:4a:58:70:80:6b:f0:8f:02:fa:f6:de:e8:b0:90:90 -# Subject: CN=CA WoSign ECC Root,O=WoSign CA Limited,C=CN -# Not Valid Before: Sat Nov 08 00:58:58 2014 -# Not Valid After : Tue Nov 08 00:58:58 2044 -# Fingerprint (SHA-256): 8B:45:DA:1C:06:F7:91:EB:0C:AB:F2:6B:E5:88:F5:FB:23:16:5C:2E:61:4B:F8:85:56:2D:0D:CE:50:B2:9B:02 -# Fingerprint (SHA1): D2:7A:D2:BE:ED:94:C0:A1:3C:C7:25:21:EA:5D:71:BE:81:19:F3:2B -CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST -CKA_TOKEN CK_BBOOL CK_TRUE -CKA_PRIVATE CK_BBOOL CK_FALSE -CKA_MODIFIABLE CK_BBOOL CK_FALSE -CKA_LABEL UTF8 "CA WoSign ECC Root" -CKA_CERT_SHA1_HASH MULTILINE_OCTAL -\322\172\322\276\355\224\300\241\074\307\045\041\352\135\161\276 -\201\031\363\053 -END -CKA_CERT_MD5_HASH MULTILINE_OCTAL -\200\306\123\356\141\202\050\162\360\377\041\271\027\312\262\040 -END -CKA_ISSUER MULTILINE_OCTAL -\060\106\061\013\060\011\006\003\125\004\006\023\002\103\116\061 -\032\060\030\006\003\125\004\012\023\021\127\157\123\151\147\156 -\040\103\101\040\114\151\155\151\164\145\144\061\033\060\031\006 -\003\125\004\003\023\022\103\101\040\127\157\123\151\147\156\040 -\105\103\103\040\122\157\157\164 -END -CKA_SERIAL_NUMBER MULTILINE_OCTAL -\002\020\150\112\130\160\200\153\360\217\002\372\366\336\350\260 -\220\220 -END -CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR -CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST -CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE - # # Certificate "SZAFIR ROOT CA2" # @@ -27873,3 +25651,1284 @@ CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "GDCA TrustAUTH R5 ROOT" +# +# Issuer: CN=GDCA TrustAUTH R5 ROOT,O="GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.",C=CN +# Serial Number:7d:09:97:fe:f0:47:ea:7a +# Subject: CN=GDCA TrustAUTH R5 ROOT,O="GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.",C=CN +# Not Valid Before: Wed Nov 26 05:13:15 2014 +# Not Valid After : Mon Dec 31 15:59:59 2040 +# Fingerprint (SHA-256): BF:FF:8F:D0:44:33:48:7D:6A:8A:A6:0C:1A:29:76:7A:9F:C2:BB:B0:5E:42:0F:71:3A:13:B9:92:89:1D:38:93 +# Fingerprint (SHA1): 0F:36:38:5B:81:1A:25:C3:9B:31:4E:83:CA:E9:34:66:70:CC:74:B4 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GDCA TrustAUTH R5 ROOT" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\142\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\062\060\060\006\003\125\004\012\014\051\107\125\101\116\107\040 +\104\117\116\107\040\103\105\122\124\111\106\111\103\101\124\105 +\040\101\125\124\110\117\122\111\124\131\040\103\117\056\054\114 +\124\104\056\061\037\060\035\006\003\125\004\003\014\026\107\104 +\103\101\040\124\162\165\163\164\101\125\124\110\040\122\065\040 +\122\117\117\124 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\142\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\062\060\060\006\003\125\004\012\014\051\107\125\101\116\107\040 +\104\117\116\107\040\103\105\122\124\111\106\111\103\101\124\105 +\040\101\125\124\110\117\122\111\124\131\040\103\117\056\054\114 +\124\104\056\061\037\060\035\006\003\125\004\003\014\026\107\104 +\103\101\040\124\162\165\163\164\101\125\124\110\040\122\065\040 +\122\117\117\124 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\175\011\227\376\360\107\352\172 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\210\060\202\003\160\240\003\002\001\002\002\010\175 +\011\227\376\360\107\352\172\060\015\006\011\052\206\110\206\367 +\015\001\001\013\005\000\060\142\061\013\060\011\006\003\125\004 +\006\023\002\103\116\061\062\060\060\006\003\125\004\012\014\051 +\107\125\101\116\107\040\104\117\116\107\040\103\105\122\124\111 +\106\111\103\101\124\105\040\101\125\124\110\117\122\111\124\131 +\040\103\117\056\054\114\124\104\056\061\037\060\035\006\003\125 +\004\003\014\026\107\104\103\101\040\124\162\165\163\164\101\125 +\124\110\040\122\065\040\122\117\117\124\060\036\027\015\061\064 +\061\061\062\066\060\065\061\063\061\065\132\027\015\064\060\061 +\062\063\061\061\065\065\071\065\071\132\060\142\061\013\060\011 +\006\003\125\004\006\023\002\103\116\061\062\060\060\006\003\125 +\004\012\014\051\107\125\101\116\107\040\104\117\116\107\040\103 +\105\122\124\111\106\111\103\101\124\105\040\101\125\124\110\117 +\122\111\124\131\040\103\117\056\054\114\124\104\056\061\037\060 +\035\006\003\125\004\003\014\026\107\104\103\101\040\124\162\165 +\163\164\101\125\124\110\040\122\065\040\122\117\117\124\060\202 +\002\042\060\015\006\011\052\206\110\206\367\015\001\001\001\005 +\000\003\202\002\017\000\060\202\002\012\002\202\002\001\000\331 +\243\026\360\310\164\164\167\233\357\063\015\073\006\176\125\374 +\265\140\217\166\206\022\102\175\126\146\076\210\202\355\162\143 +\016\236\213\335\064\054\002\121\121\303\031\375\131\124\204\311 +\361\153\263\114\260\351\350\106\135\070\306\242\247\056\021\127 +\272\202\025\242\234\217\155\260\231\112\012\362\353\211\160\143 +\116\171\304\267\133\275\242\135\261\362\101\002\053\255\251\072 +\243\354\171\012\354\137\072\343\375\357\200\074\255\064\233\032 +\253\210\046\173\126\242\202\206\037\353\065\211\203\177\137\256 +\051\116\075\266\156\354\256\301\360\047\233\256\343\364\354\357 +\256\177\367\206\075\162\172\353\245\373\131\116\247\353\225\214 +\042\071\171\341\055\010\217\314\274\221\270\101\367\024\301\043 +\251\303\255\232\105\104\263\262\327\054\315\306\051\342\120\020 +\256\134\313\202\216\027\030\066\175\227\346\210\232\260\115\064 +\011\364\054\271\132\146\052\260\027\233\236\036\166\235\112\146 +\061\101\337\077\373\305\006\357\033\266\176\032\106\066\367\144 +\143\073\343\071\030\043\347\147\165\024\325\165\127\222\067\275 +\276\152\033\046\120\362\066\046\006\220\305\160\001\144\155\166 +\146\341\221\333\156\007\300\141\200\056\262\056\057\214\160\247 +\321\073\074\263\221\344\156\266\304\073\160\362\154\222\227\011 +\315\107\175\030\300\363\273\236\017\326\213\256\007\266\132\017 +\316\013\014\107\247\345\076\270\275\175\307\233\065\240\141\227 +\072\101\165\027\314\053\226\167\052\222\041\036\331\225\166\040 +\147\150\317\015\275\337\326\037\011\152\232\342\314\163\161\244 +\057\175\022\200\267\123\060\106\136\113\124\231\017\147\311\245 +\310\362\040\301\202\354\235\021\337\302\002\373\032\073\321\355 +\040\232\357\145\144\222\020\015\052\342\336\160\361\030\147\202 +\214\141\336\270\274\321\057\234\373\017\320\053\355\033\166\271 +\344\071\125\370\370\241\035\270\252\200\000\114\202\347\262\177 +\011\270\274\060\240\057\015\365\122\236\216\367\222\263\012\000 +\035\000\124\227\006\340\261\007\331\307\017\134\145\175\074\155 +\131\127\344\355\245\215\351\100\123\237\025\113\240\161\366\032 +\041\343\332\160\006\041\130\024\207\205\167\171\252\202\171\002 +\003\001\000\001\243\102\060\100\060\035\006\003\125\035\016\004 +\026\004\024\342\311\100\237\115\316\350\232\241\174\317\016\077 +\145\305\051\210\152\031\121\060\017\006\003\125\035\023\001\001 +\377\004\005\060\003\001\001\377\060\016\006\003\125\035\017\001 +\001\377\004\004\003\002\001\206\060\015\006\011\052\206\110\206 +\367\015\001\001\013\005\000\003\202\002\001\000\321\111\127\340 +\247\314\150\130\272\001\017\053\031\315\215\260\141\105\254\021 +\355\143\120\151\370\037\177\276\026\217\375\235\353\013\252\062 +\107\166\322\147\044\355\275\174\063\062\227\052\307\005\206\146 +\015\027\175\024\025\033\324\353\375\037\232\366\136\227\151\267 +\032\045\244\012\263\221\077\137\066\254\213\354\127\250\076\347 +\201\212\030\127\071\205\164\032\102\307\351\133\023\137\217\371 +\010\351\222\164\215\365\107\322\253\073\326\373\170\146\116\066 +\175\371\351\222\351\004\336\375\111\143\374\155\373\024\161\223 +\147\057\107\112\267\271\377\036\052\163\160\106\060\277\132\362 +\057\171\245\341\215\014\331\371\262\143\067\214\067\145\205\160 +\152\134\133\011\162\271\255\143\074\261\335\370\374\062\277\067 +\206\344\273\216\230\047\176\272\037\026\341\160\021\362\003\337 +\045\142\062\047\046\030\062\204\237\377\000\072\023\272\232\115 +\364\117\270\024\160\042\261\312\053\220\316\051\301\160\364\057 +\235\177\362\220\036\326\132\337\267\106\374\346\206\372\313\340 +\040\166\172\272\246\313\365\174\336\142\245\261\213\356\336\202 +\146\212\116\072\060\037\077\200\313\255\047\272\014\136\327\320 +\261\126\312\167\161\262\265\165\241\120\251\100\103\027\302\050 +\331\317\122\213\133\310\143\324\102\076\240\063\172\106\056\367 +\012\040\106\124\176\152\117\061\361\201\176\102\164\070\145\163 +\047\356\306\174\270\216\327\245\072\327\230\241\234\214\020\125 +\323\333\113\354\100\220\362\315\156\127\322\142\016\174\127\223 +\261\247\155\315\235\203\273\052\347\345\266\073\161\130\255\375 +\321\105\274\132\221\356\123\025\157\323\105\011\165\156\272\220 +\135\036\004\317\067\337\036\250\146\261\214\346\040\152\357\374 +\110\116\164\230\102\257\051\157\056\152\307\373\175\321\146\061 +\042\314\206\000\176\146\203\014\102\364\275\064\222\303\032\352 +\117\312\176\162\115\013\160\214\246\110\273\246\241\024\366\373 +\130\104\231\024\256\252\013\223\151\240\051\045\112\245\313\053 +\335\212\146\007\026\170\025\127\161\033\354\365\107\204\363\236 +\061\067\172\325\177\044\255\344\274\375\375\314\156\203\350\014 +\250\267\101\154\007\335\275\074\206\227\057\322 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE + +# Trust for "GDCA TrustAUTH R5 ROOT" +# Issuer: CN=GDCA TrustAUTH R5 ROOT,O="GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.",C=CN +# Serial Number:7d:09:97:fe:f0:47:ea:7a +# Subject: CN=GDCA TrustAUTH R5 ROOT,O="GUANG DONG CERTIFICATE AUTHORITY CO.,LTD.",C=CN +# Not Valid Before: Wed Nov 26 05:13:15 2014 +# Not Valid After : Mon Dec 31 15:59:59 2040 +# Fingerprint (SHA-256): BF:FF:8F:D0:44:33:48:7D:6A:8A:A6:0C:1A:29:76:7A:9F:C2:BB:B0:5E:42:0F:71:3A:13:B9:92:89:1D:38:93 +# Fingerprint (SHA1): 0F:36:38:5B:81:1A:25:C3:9B:31:4E:83:CA:E9:34:66:70:CC:74:B4 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "GDCA TrustAUTH R5 ROOT" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\017\066\070\133\201\032\045\303\233\061\116\203\312\351\064\146 +\160\314\164\264 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\143\314\331\075\064\065\134\157\123\243\342\010\160\110\037\264 +END +CKA_ISSUER MULTILINE_OCTAL +\060\142\061\013\060\011\006\003\125\004\006\023\002\103\116\061 +\062\060\060\006\003\125\004\012\014\051\107\125\101\116\107\040 +\104\117\116\107\040\103\105\122\124\111\106\111\103\101\124\105 +\040\101\125\124\110\117\122\111\124\131\040\103\117\056\054\114 +\124\104\056\061\037\060\035\006\003\125\004\003\014\026\107\104 +\103\101\040\124\162\165\163\164\101\125\124\110\040\122\065\040 +\122\117\117\124 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\175\011\227\376\360\107\352\172 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "TrustCor RootCert CA-1" +# +# Issuer: CN=TrustCor RootCert CA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Serial Number:00:da:9b:ec:71:f3:03:b0:19 +# Subject: CN=TrustCor RootCert CA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Not Valid Before: Thu Feb 04 12:32:16 2016 +# Not Valid After : Mon Dec 31 17:23:16 2029 +# Fingerprint (SHA-256): D4:0E:9C:86:CD:8F:E4:68:C1:77:69:59:F4:9E:A7:74:FA:54:86:84:B6:C4:06:F3:90:92:61:F4:DC:E2:57:5C +# Fingerprint (SHA1): FF:BD:CD:E7:82:C8:43:5E:3C:6F:26:86:5C:CA:A8:3A:45:5B:C3:0A +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "TrustCor RootCert CA-1" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\244\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\037\060\035\006\003\125\004\003\014 +\026\124\162\165\163\164\103\157\162\040\122\157\157\164\103\145 +\162\164\040\103\101\055\061 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\244\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\037\060\035\006\003\125\004\003\014 +\026\124\162\165\163\164\103\157\162\040\122\157\157\164\103\145 +\162\164\040\103\101\055\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\011\000\332\233\354\161\363\003\260\031 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\004\060\060\202\003\030\240\003\002\001\002\002\011\000 +\332\233\354\161\363\003\260\031\060\015\006\011\052\206\110\206 +\367\015\001\001\013\005\000\060\201\244\061\013\060\011\006\003 +\125\004\006\023\002\120\101\061\017\060\015\006\003\125\004\010 +\014\006\120\141\156\141\155\141\061\024\060\022\006\003\125\004 +\007\014\013\120\141\156\141\155\141\040\103\151\164\171\061\044 +\060\042\006\003\125\004\012\014\033\124\162\165\163\164\103\157 +\162\040\123\171\163\164\145\155\163\040\123\056\040\144\145\040 +\122\056\114\056\061\047\060\045\006\003\125\004\013\014\036\124 +\162\165\163\164\103\157\162\040\103\145\162\164\151\146\151\143 +\141\164\145\040\101\165\164\150\157\162\151\164\171\061\037\060 +\035\006\003\125\004\003\014\026\124\162\165\163\164\103\157\162 +\040\122\157\157\164\103\145\162\164\040\103\101\055\061\060\036 +\027\015\061\066\060\062\060\064\061\062\063\062\061\066\132\027 +\015\062\071\061\062\063\061\061\067\062\063\061\066\132\060\201 +\244\061\013\060\011\006\003\125\004\006\023\002\120\101\061\017 +\060\015\006\003\125\004\010\014\006\120\141\156\141\155\141\061 +\024\060\022\006\003\125\004\007\014\013\120\141\156\141\155\141 +\040\103\151\164\171\061\044\060\042\006\003\125\004\012\014\033 +\124\162\165\163\164\103\157\162\040\123\171\163\164\145\155\163 +\040\123\056\040\144\145\040\122\056\114\056\061\047\060\045\006 +\003\125\004\013\014\036\124\162\165\163\164\103\157\162\040\103 +\145\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157 +\162\151\164\171\061\037\060\035\006\003\125\004\003\014\026\124 +\162\165\163\164\103\157\162\040\122\157\157\164\103\145\162\164 +\040\103\101\055\061\060\202\001\042\060\015\006\011\052\206\110 +\206\367\015\001\001\001\005\000\003\202\001\017\000\060\202\001 +\012\002\202\001\001\000\277\216\267\225\342\302\046\022\153\063 +\031\307\100\130\012\253\131\252\215\000\243\374\200\307\120\173 +\216\324\040\046\272\062\022\330\043\124\111\045\020\042\230\235 +\106\322\301\311\236\116\033\056\054\016\070\363\032\045\150\034 +\246\132\005\346\036\213\110\277\230\226\164\076\151\312\351\265 +\170\245\006\274\325\000\136\011\012\362\047\172\122\374\055\325 +\261\352\264\211\141\044\363\032\023\333\251\317\122\355\014\044 +\272\271\236\354\176\000\164\372\223\255\154\051\222\256\121\264 +\273\323\127\277\263\363\250\215\234\364\044\113\052\326\231\236 +\364\236\376\300\176\102\072\347\013\225\123\332\267\150\016\220 +\114\373\160\077\217\112\054\224\363\046\335\143\151\251\224\330 +\020\116\305\107\010\220\231\033\027\115\271\154\156\357\140\225 +\021\216\041\200\265\275\240\163\330\320\262\167\304\105\352\132 +\046\373\146\166\166\370\006\037\141\155\017\125\305\203\267\020 +\126\162\006\007\245\363\261\032\003\005\144\016\235\132\212\326 +\206\160\033\044\336\376\050\212\053\320\152\260\374\172\242\334 +\262\171\016\213\145\017\002\003\001\000\001\243\143\060\141\060 +\035\006\003\125\035\016\004\026\004\024\356\153\111\074\172\077 +\015\343\261\011\267\212\310\253\031\237\163\063\120\347\060\037 +\006\003\125\035\043\004\030\060\026\200\024\356\153\111\074\172 +\077\015\343\261\011\267\212\310\253\031\237\163\063\120\347\060 +\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 +\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206 +\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003 +\202\001\001\000\045\030\324\221\217\023\356\217\036\035\021\123 +\332\055\104\051\031\240\036\153\061\236\115\016\236\255\075\134 +\101\157\225\053\044\241\171\230\072\070\066\373\273\146\236\110 +\377\220\220\357\075\324\270\233\264\207\165\077\040\233\316\162 +\317\241\125\301\115\144\242\031\006\241\007\063\014\013\051\345 +\361\352\253\243\354\265\012\164\220\307\175\162\362\327\134\237 +\221\357\221\213\267\334\355\146\242\317\216\146\073\274\237\072 +\002\340\047\335\026\230\300\225\324\012\244\344\201\232\165\224 +\065\234\220\137\210\067\006\255\131\225\012\260\321\147\323\031 +\312\211\347\062\132\066\034\076\202\250\132\223\276\306\320\144 +\221\266\317\331\266\030\317\333\176\322\145\243\246\304\216\027 +\061\301\373\176\166\333\323\205\343\130\262\167\172\166\073\154 +\057\120\034\347\333\366\147\171\037\365\202\225\232\007\247\024 +\257\217\334\050\041\147\011\322\326\115\132\034\031\034\216\167 +\134\303\224\044\075\062\153\113\176\324\170\224\203\276\067\115 +\316\137\307\036\116\074\340\211\063\225\013\017\245\062\326\074 +\132\171\054\031 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE + +# Trust for "TrustCor RootCert CA-1" +# Issuer: CN=TrustCor RootCert CA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Serial Number:00:da:9b:ec:71:f3:03:b0:19 +# Subject: CN=TrustCor RootCert CA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Not Valid Before: Thu Feb 04 12:32:16 2016 +# Not Valid After : Mon Dec 31 17:23:16 2029 +# Fingerprint (SHA-256): D4:0E:9C:86:CD:8F:E4:68:C1:77:69:59:F4:9E:A7:74:FA:54:86:84:B6:C4:06:F3:90:92:61:F4:DC:E2:57:5C +# Fingerprint (SHA1): FF:BD:CD:E7:82:C8:43:5E:3C:6F:26:86:5C:CA:A8:3A:45:5B:C3:0A +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "TrustCor RootCert CA-1" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\377\275\315\347\202\310\103\136\074\157\046\206\134\312\250\072 +\105\133\303\012 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\156\205\361\334\032\000\323\042\325\262\262\254\153\067\005\105 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\244\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\037\060\035\006\003\125\004\003\014 +\026\124\162\165\163\164\103\157\162\040\122\157\157\164\103\145 +\162\164\040\103\101\055\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\011\000\332\233\354\161\363\003\260\031 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "TrustCor RootCert CA-2" +# +# Issuer: CN=TrustCor RootCert CA-2,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Serial Number:25:a1:df:ca:33:cb:59:02 +# Subject: CN=TrustCor RootCert CA-2,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Not Valid Before: Thu Feb 04 12:32:23 2016 +# Not Valid After : Sun Dec 31 17:26:39 2034 +# Fingerprint (SHA-256): 07:53:E9:40:37:8C:1B:D5:E3:83:6E:39:5D:AE:A5:CB:83:9E:50:46:F1:BD:0E:AE:19:51:CF:10:FE:C7:C9:65 +# Fingerprint (SHA1): B8:BE:6D:CB:56:F1:55:B9:63:D4:12:CA:4E:06:34:C7:94:B2:1C:C0 +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "TrustCor RootCert CA-2" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\244\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\037\060\035\006\003\125\004\003\014 +\026\124\162\165\163\164\103\157\162\040\122\157\157\164\103\145 +\162\164\040\103\101\055\062 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\244\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\037\060\035\006\003\125\004\003\014 +\026\124\162\165\163\164\103\157\162\040\122\157\157\164\103\145 +\162\164\040\103\101\055\062 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\045\241\337\312\063\313\131\002 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\006\057\060\202\004\027\240\003\002\001\002\002\010\045 +\241\337\312\063\313\131\002\060\015\006\011\052\206\110\206\367 +\015\001\001\013\005\000\060\201\244\061\013\060\011\006\003\125 +\004\006\023\002\120\101\061\017\060\015\006\003\125\004\010\014 +\006\120\141\156\141\155\141\061\024\060\022\006\003\125\004\007 +\014\013\120\141\156\141\155\141\040\103\151\164\171\061\044\060 +\042\006\003\125\004\012\014\033\124\162\165\163\164\103\157\162 +\040\123\171\163\164\145\155\163\040\123\056\040\144\145\040\122 +\056\114\056\061\047\060\045\006\003\125\004\013\014\036\124\162 +\165\163\164\103\157\162\040\103\145\162\164\151\146\151\143\141 +\164\145\040\101\165\164\150\157\162\151\164\171\061\037\060\035 +\006\003\125\004\003\014\026\124\162\165\163\164\103\157\162\040 +\122\157\157\164\103\145\162\164\040\103\101\055\062\060\036\027 +\015\061\066\060\062\060\064\061\062\063\062\062\063\132\027\015 +\063\064\061\062\063\061\061\067\062\066\063\071\132\060\201\244 +\061\013\060\011\006\003\125\004\006\023\002\120\101\061\017\060 +\015\006\003\125\004\010\014\006\120\141\156\141\155\141\061\024 +\060\022\006\003\125\004\007\014\013\120\141\156\141\155\141\040 +\103\151\164\171\061\044\060\042\006\003\125\004\012\014\033\124 +\162\165\163\164\103\157\162\040\123\171\163\164\145\155\163\040 +\123\056\040\144\145\040\122\056\114\056\061\047\060\045\006\003 +\125\004\013\014\036\124\162\165\163\164\103\157\162\040\103\145 +\162\164\151\146\151\143\141\164\145\040\101\165\164\150\157\162 +\151\164\171\061\037\060\035\006\003\125\004\003\014\026\124\162 +\165\163\164\103\157\162\040\122\157\157\164\103\145\162\164\040 +\103\101\055\062\060\202\002\042\060\015\006\011\052\206\110\206 +\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012 +\002\202\002\001\000\247\040\156\302\052\242\142\044\225\220\166 +\310\070\176\200\322\253\301\233\145\005\224\364\301\012\020\325 +\002\254\355\237\223\307\207\310\260\047\053\102\014\075\012\076 +\101\132\236\165\335\215\312\340\233\354\150\062\244\151\222\150 +\214\013\201\016\126\240\076\032\335\054\045\024\202\057\227\323 +\144\106\364\124\251\334\072\124\055\061\053\231\202\362\331\052 +\327\357\161\000\270\061\244\276\172\044\007\303\102\040\362\212 +\324\222\004\033\145\126\114\154\324\373\266\141\132\107\043\264 +\330\151\264\267\072\320\164\074\014\165\241\214\116\166\241\351 +\333\052\245\073\372\316\260\377\176\152\050\375\047\034\310\261 +\351\051\361\127\156\144\264\320\301\025\155\016\276\056\016\106 +\310\136\364\121\376\357\016\143\072\073\161\272\317\157\131\312 +\014\343\233\135\111\270\114\342\127\261\230\212\102\127\234\166 +\357\357\275\321\150\250\322\364\011\273\167\065\276\045\202\010 +\304\026\054\104\040\126\251\104\021\167\357\135\264\035\252\136 +\153\076\213\062\366\007\057\127\004\222\312\365\376\235\302\351 +\350\263\216\114\113\002\061\331\344\074\110\202\047\367\030\202 +\166\110\072\161\261\023\241\071\325\056\305\064\302\035\142\205 +\337\003\376\115\364\257\075\337\134\133\215\372\160\341\245\176 +\047\307\206\056\152\217\022\306\204\136\103\121\120\234\031\233 +\170\346\374\366\355\107\176\173\075\146\357\023\023\210\137\074 +\241\143\373\371\254\207\065\237\363\202\236\244\077\012\234\061 +\151\213\231\244\210\112\216\156\146\115\357\026\304\017\171\050 +\041\140\015\205\026\175\327\124\070\361\222\126\375\265\063\114 +\203\334\327\020\237\113\375\306\370\102\275\272\174\163\002\340 +\377\175\315\133\341\324\254\141\173\127\325\112\173\133\324\205 +\130\047\135\277\370\053\140\254\240\046\256\024\041\047\306\167 +\232\063\200\074\136\106\077\367\303\261\243\206\063\306\350\136 +\015\271\065\054\252\106\301\205\002\165\200\240\353\044\373\025 +\252\344\147\177\156\167\077\364\004\212\057\174\173\343\027\141 +\360\335\011\251\040\310\276\011\244\320\176\104\303\262\060\112 +\070\252\251\354\030\232\007\202\053\333\270\234\030\255\332\340 +\106\027\254\317\135\002\003\001\000\001\243\143\060\141\060\035 +\006\003\125\035\016\004\026\004\024\331\376\041\100\156\224\236 +\274\233\075\234\175\230\040\031\345\214\060\142\262\060\037\006 +\003\125\035\043\004\030\060\026\200\024\331\376\041\100\156\224 +\236\274\233\075\234\175\230\040\031\345\214\060\142\262\060\017 +\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060 +\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206\060 +\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202 +\002\001\000\236\105\236\014\073\266\357\341\072\310\174\321\000 +\075\317\342\352\006\265\262\072\273\006\113\150\172\320\043\227 +\164\247\054\360\010\330\171\132\327\132\204\212\330\022\232\033 +\331\175\134\115\160\305\245\371\253\345\243\211\211\335\001\372 +\354\335\371\351\222\227\333\260\106\102\363\323\142\252\225\376 +\061\147\024\151\130\220\012\252\013\356\067\043\307\120\121\264 +\365\176\236\343\173\367\344\314\102\062\055\111\014\313\377\111 +\014\233\036\064\375\156\156\226\212\171\003\266\157\333\011\313 +\375\137\145\024\067\341\070\365\363\141\026\130\344\265\155\015 +\013\004\033\077\120\055\177\263\307\172\032\026\200\140\370\212 +\037\351\033\052\306\371\272\001\032\151\277\322\130\307\124\127 +\010\217\341\071\140\167\113\254\131\204\032\210\361\335\313\117 +\170\327\347\341\063\055\374\356\101\372\040\260\276\313\367\070 +\224\300\341\320\205\017\273\355\054\163\253\355\376\222\166\032 +\144\177\133\015\063\011\007\063\173\006\077\021\244\134\160\074 +\205\300\317\343\220\250\203\167\372\333\346\305\214\150\147\020 +\147\245\122\055\360\304\231\217\177\277\321\153\342\265\107\326 +\331\320\205\231\115\224\233\017\113\215\356\000\132\107\035\021 +\003\254\101\030\257\207\267\157\014\072\217\312\317\334\003\301 +\242\011\310\345\375\200\136\310\140\102\001\033\032\123\132\273 +\067\246\267\274\272\204\351\036\154\032\324\144\332\324\103\376 +\223\213\113\362\054\171\026\020\324\223\013\210\217\241\330\206 +\024\106\221\107\233\050\044\357\127\122\116\134\102\234\252\367 +\111\354\047\350\100\036\263\246\211\042\162\234\365\015\063\264 +\130\243\060\073\335\324\152\124\223\276\032\115\363\223\224\367 +\374\204\013\077\204\040\134\064\003\104\305\332\255\274\012\301 +\002\317\036\345\224\331\363\216\133\330\114\360\235\354\141\027 +\273\024\062\124\014\002\051\223\036\222\206\366\177\357\347\222 +\005\016\131\335\231\010\056\056\372\234\000\122\323\305\146\051 +\344\247\227\104\244\016\050\201\023\065\305\366\157\144\346\101 +\304\325\057\314\064\105\045\317\101\000\226\075\112\056\302\226 +\230\117\116\112\234\227\267\333\037\222\062\310\377\017\121\156 +\326\354\011 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE + +# Trust for "TrustCor RootCert CA-2" +# Issuer: CN=TrustCor RootCert CA-2,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Serial Number:25:a1:df:ca:33:cb:59:02 +# Subject: CN=TrustCor RootCert CA-2,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Not Valid Before: Thu Feb 04 12:32:23 2016 +# Not Valid After : Sun Dec 31 17:26:39 2034 +# Fingerprint (SHA-256): 07:53:E9:40:37:8C:1B:D5:E3:83:6E:39:5D:AE:A5:CB:83:9E:50:46:F1:BD:0E:AE:19:51:CF:10:FE:C7:C9:65 +# Fingerprint (SHA1): B8:BE:6D:CB:56:F1:55:B9:63:D4:12:CA:4E:06:34:C7:94:B2:1C:C0 +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "TrustCor RootCert CA-2" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\270\276\155\313\126\361\125\271\143\324\022\312\116\006\064\307 +\224\262\034\300 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\242\341\370\030\013\272\105\325\307\101\052\273\067\122\105\144 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\244\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\037\060\035\006\003\125\004\003\014 +\026\124\162\165\163\164\103\157\162\040\122\157\157\164\103\145 +\162\164\040\103\101\055\062 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\045\241\337\312\063\313\131\002 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "TrustCor ECA-1" +# +# Issuer: CN=TrustCor ECA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Serial Number:00:84:82:2c:5f:1c:62:d0:40 +# Subject: CN=TrustCor ECA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Not Valid Before: Thu Feb 04 12:32:33 2016 +# Not Valid After : Mon Dec 31 17:28:07 2029 +# Fingerprint (SHA-256): 5A:88:5D:B1:9C:01:D9:12:C5:75:93:88:93:8C:AF:BB:DF:03:1A:B2:D4:8E:91:EE:15:58:9B:42:97:1D:03:9C +# Fingerprint (SHA1): 58:D1:DF:95:95:67:6B:63:C0:F0:5B:1C:17:4D:8B:84:0B:C8:78:BD +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "TrustCor ECA-1" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\234\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\027\060\025\006\003\125\004\003\014 +\016\124\162\165\163\164\103\157\162\040\105\103\101\055\061 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\234\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\027\060\025\006\003\125\004\003\014 +\016\124\162\165\163\164\103\157\162\040\105\103\101\055\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\011\000\204\202\054\137\034\142\320\100 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\004\040\060\202\003\010\240\003\002\001\002\002\011\000 +\204\202\054\137\034\142\320\100\060\015\006\011\052\206\110\206 +\367\015\001\001\013\005\000\060\201\234\061\013\060\011\006\003 +\125\004\006\023\002\120\101\061\017\060\015\006\003\125\004\010 +\014\006\120\141\156\141\155\141\061\024\060\022\006\003\125\004 +\007\014\013\120\141\156\141\155\141\040\103\151\164\171\061\044 +\060\042\006\003\125\004\012\014\033\124\162\165\163\164\103\157 +\162\040\123\171\163\164\145\155\163\040\123\056\040\144\145\040 +\122\056\114\056\061\047\060\045\006\003\125\004\013\014\036\124 +\162\165\163\164\103\157\162\040\103\145\162\164\151\146\151\143 +\141\164\145\040\101\165\164\150\157\162\151\164\171\061\027\060 +\025\006\003\125\004\003\014\016\124\162\165\163\164\103\157\162 +\040\105\103\101\055\061\060\036\027\015\061\066\060\062\060\064 +\061\062\063\062\063\063\132\027\015\062\071\061\062\063\061\061 +\067\062\070\060\067\132\060\201\234\061\013\060\011\006\003\125 +\004\006\023\002\120\101\061\017\060\015\006\003\125\004\010\014 +\006\120\141\156\141\155\141\061\024\060\022\006\003\125\004\007 +\014\013\120\141\156\141\155\141\040\103\151\164\171\061\044\060 +\042\006\003\125\004\012\014\033\124\162\165\163\164\103\157\162 +\040\123\171\163\164\145\155\163\040\123\056\040\144\145\040\122 +\056\114\056\061\047\060\045\006\003\125\004\013\014\036\124\162 +\165\163\164\103\157\162\040\103\145\162\164\151\146\151\143\141 +\164\145\040\101\165\164\150\157\162\151\164\171\061\027\060\025 +\006\003\125\004\003\014\016\124\162\165\163\164\103\157\162\040 +\105\103\101\055\061\060\202\001\042\060\015\006\011\052\206\110 +\206\367\015\001\001\001\005\000\003\202\001\017\000\060\202\001 +\012\002\202\001\001\000\317\217\340\021\265\237\250\166\166\333 +\337\017\124\357\163\143\051\202\255\107\306\243\153\355\376\137 +\063\370\103\121\351\032\063\221\061\027\240\164\304\324\247\001 +\346\262\222\076\152\235\355\016\371\164\230\100\323\077\003\200 +\006\202\100\350\261\342\247\121\247\035\203\046\153\253\336\372 +\027\221\053\330\306\254\036\261\236\031\001\325\227\246\352\015 +\267\304\125\037\047\174\322\010\325\166\037\051\025\207\100\071 +\335\070\105\021\165\320\232\247\064\340\277\315\310\122\035\271 +\107\176\015\270\273\306\014\366\163\127\026\132\176\103\221\037 +\125\072\306\155\104\004\252\234\251\234\247\114\211\027\203\256 +\243\004\136\122\200\213\036\022\045\021\031\327\014\175\175\061 +\104\101\352\333\257\260\034\357\201\320\054\305\232\041\233\075 +\355\102\073\120\046\362\354\316\161\141\006\142\041\124\116\177 +\301\235\076\177\040\214\200\313\052\330\227\142\310\203\063\221 +\175\260\242\132\017\127\350\073\314\362\045\262\324\174\057\354 +\115\306\241\072\025\172\347\266\135\065\365\366\110\112\066\105 +\146\324\272\230\130\301\002\003\001\000\001\243\143\060\141\060 +\035\006\003\125\035\016\004\026\004\024\104\236\110\365\314\155 +\110\324\240\113\177\376\131\044\057\203\227\231\232\206\060\037 +\006\003\125\035\043\004\030\060\026\200\024\104\236\110\365\314 +\155\110\324\240\113\177\376\131\044\057\203\227\231\232\206\060 +\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377 +\060\016\006\003\125\035\017\001\001\377\004\004\003\002\001\206 +\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003 +\202\001\001\000\005\076\065\134\025\160\233\311\307\163\141\157 +\162\053\324\302\217\362\103\135\002\316\304\224\271\224\021\203 +\147\135\342\147\154\165\166\277\273\014\252\066\306\255\107\223 +\143\334\036\176\326\336\056\376\351\031\062\070\003\177\024\366 +\000\163\054\131\261\041\006\341\373\254\030\225\014\243\377\231 +\226\367\053\047\233\325\044\314\035\335\301\072\340\230\104\260 +\304\344\076\167\261\163\251\144\054\366\034\001\174\077\135\105 +\205\300\205\347\045\217\225\334\027\363\074\237\032\156\260\312 +\343\035\052\351\114\143\372\044\141\142\326\332\176\266\034\154 +\365\002\035\324\052\335\125\220\353\052\021\107\074\056\136\164 +\262\202\042\245\175\123\037\105\354\047\221\175\347\042\026\350 +\300\150\066\330\306\361\117\200\104\062\371\341\321\321\035\252 +\336\250\253\234\004\257\255\040\016\144\230\115\245\153\300\110 +\130\226\151\115\334\007\214\121\223\242\337\237\017\075\213\140 +\264\202\215\252\010\116\142\105\340\371\013\322\340\340\074\133 +\336\134\161\047\045\302\346\003\201\213\020\123\343\307\125\242 +\264\237\327\346 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE + +# Trust for "TrustCor ECA-1" +# Issuer: CN=TrustCor ECA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Serial Number:00:84:82:2c:5f:1c:62:d0:40 +# Subject: CN=TrustCor ECA-1,OU=TrustCor Certificate Authority,O=TrustCor Systems S. de R.L.,L=Panama City,ST=Panama,C=PA +# Not Valid Before: Thu Feb 04 12:32:33 2016 +# Not Valid After : Mon Dec 31 17:28:07 2029 +# Fingerprint (SHA-256): 5A:88:5D:B1:9C:01:D9:12:C5:75:93:88:93:8C:AF:BB:DF:03:1A:B2:D4:8E:91:EE:15:58:9B:42:97:1D:03:9C +# Fingerprint (SHA1): 58:D1:DF:95:95:67:6B:63:C0:F0:5B:1C:17:4D:8B:84:0B:C8:78:BD +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "TrustCor ECA-1" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\130\321\337\225\225\147\153\143\300\360\133\034\027\115\213\204 +\013\310\170\275 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\047\222\043\035\012\365\100\174\351\346\153\235\330\365\347\154 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\234\061\013\060\011\006\003\125\004\006\023\002\120\101 +\061\017\060\015\006\003\125\004\010\014\006\120\141\156\141\155 +\141\061\024\060\022\006\003\125\004\007\014\013\120\141\156\141 +\155\141\040\103\151\164\171\061\044\060\042\006\003\125\004\012 +\014\033\124\162\165\163\164\103\157\162\040\123\171\163\164\145 +\155\163\040\123\056\040\144\145\040\122\056\114\056\061\047\060 +\045\006\003\125\004\013\014\036\124\162\165\163\164\103\157\162 +\040\103\145\162\164\151\146\151\143\141\164\145\040\101\165\164 +\150\157\162\151\164\171\061\027\060\025\006\003\125\004\003\014 +\016\124\162\165\163\164\103\157\162\040\105\103\101\055\061 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\011\000\204\202\054\137\034\142\320\100 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "SSL.com Root Certification Authority RSA" +# +# Issuer: CN=SSL.com Root Certification Authority RSA,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Serial Number:7b:2c:9b:d3:16:80:32:99 +# Subject: CN=SSL.com Root Certification Authority RSA,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Not Valid Before: Fri Feb 12 17:39:39 2016 +# Not Valid After : Tue Feb 12 17:39:39 2041 +# Fingerprint (SHA-256): 85:66:6A:56:2E:E0:BE:5C:E9:25:C1:D8:89:0A:6F:76:A8:7E:C1:6D:4D:7D:5F:29:EA:74:19:CF:20:12:3B:69 +# Fingerprint (SHA1): B7:AB:33:08:D1:EA:44:77:BA:14:80:12:5A:6F:BD:A9:36:49:0C:BB +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "SSL.com Root Certification Authority RSA" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\174\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\061\060\057\006 +\003\125\004\003\014\050\123\123\114\056\143\157\155\040\122\157 +\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157\156 +\040\101\165\164\150\157\162\151\164\171\040\122\123\101 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\174\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\061\060\057\006 +\003\125\004\003\014\050\123\123\114\056\143\157\155\040\122\157 +\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157\156 +\040\101\165\164\150\157\162\151\164\171\040\122\123\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\173\054\233\323\026\200\062\231 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\335\060\202\003\305\240\003\002\001\002\002\010\173 +\054\233\323\026\200\062\231\060\015\006\011\052\206\110\206\367 +\015\001\001\013\005\000\060\174\061\013\060\011\006\003\125\004 +\006\023\002\125\123\061\016\060\014\006\003\125\004\010\014\005 +\124\145\170\141\163\061\020\060\016\006\003\125\004\007\014\007 +\110\157\165\163\164\157\156\061\030\060\026\006\003\125\004\012 +\014\017\123\123\114\040\103\157\162\160\157\162\141\164\151\157 +\156\061\061\060\057\006\003\125\004\003\014\050\123\123\114\056 +\143\157\155\040\122\157\157\164\040\103\145\162\164\151\146\151 +\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 +\040\122\123\101\060\036\027\015\061\066\060\062\061\062\061\067 +\063\071\063\071\132\027\015\064\061\060\062\061\062\061\067\063 +\071\063\071\132\060\174\061\013\060\011\006\003\125\004\006\023 +\002\125\123\061\016\060\014\006\003\125\004\010\014\005\124\145 +\170\141\163\061\020\060\016\006\003\125\004\007\014\007\110\157 +\165\163\164\157\156\061\030\060\026\006\003\125\004\012\014\017 +\123\123\114\040\103\157\162\160\157\162\141\164\151\157\156\061 +\061\060\057\006\003\125\004\003\014\050\123\123\114\056\143\157 +\155\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141 +\164\151\157\156\040\101\165\164\150\157\162\151\164\171\040\122 +\123\101\060\202\002\042\060\015\006\011\052\206\110\206\367\015 +\001\001\001\005\000\003\202\002\017\000\060\202\002\012\002\202 +\002\001\000\371\017\335\243\053\175\313\320\052\376\354\147\205 +\246\347\056\033\272\167\341\343\365\257\244\354\372\112\135\221 +\304\127\107\153\030\167\153\166\362\375\223\344\075\017\302\026 +\236\013\146\303\126\224\236\027\203\205\316\126\357\362\026\375 +\000\142\365\042\011\124\350\145\027\116\101\271\340\117\106\227 +\252\033\310\270\156\142\136\151\261\137\333\052\002\176\374\154 +\312\363\101\330\355\320\350\374\077\141\110\355\260\003\024\035 +\020\016\113\031\340\273\116\354\206\145\377\066\363\136\147\002 +\013\235\206\125\141\375\172\070\355\376\342\031\000\267\157\241 +\120\142\165\164\074\240\372\310\045\222\264\156\172\042\307\370 +\036\241\343\262\335\221\061\253\053\035\004\377\245\112\004\067 +\351\205\244\063\053\375\342\326\125\064\174\031\244\112\150\307 +\262\250\323\267\312\241\223\210\353\301\227\274\214\371\035\331 +\042\204\044\164\307\004\075\152\251\051\223\314\353\270\133\341 +\376\137\045\252\064\130\310\301\043\124\235\033\230\021\303\070 +\234\176\075\206\154\245\017\100\206\174\002\364\134\002\117\050 +\313\256\161\237\017\072\310\063\376\021\045\065\352\374\272\305 +\140\075\331\174\030\325\262\251\323\165\170\003\162\042\312\072 +\303\037\357\054\345\056\251\372\236\054\266\121\106\375\257\003 +\326\352\140\150\352\205\026\066\153\205\351\036\300\263\335\304 +\044\334\200\052\201\101\155\224\076\310\340\311\201\101\000\236 +\136\277\177\305\010\230\242\030\054\102\100\263\371\157\070\047 +\113\116\200\364\075\201\107\340\210\174\352\034\316\265\165\134 +\121\056\034\053\177\032\162\050\347\000\265\321\164\306\327\344 +\237\255\007\223\266\123\065\065\374\067\344\303\366\135\026\276 +\041\163\336\222\012\370\240\143\152\274\226\222\152\076\370\274 +\145\125\233\336\365\015\211\046\004\374\045\032\246\045\151\313 +\302\155\312\174\342\131\137\227\254\353\357\056\310\274\327\033 +\131\074\053\314\362\031\310\223\153\047\143\031\317\374\351\046 +\370\312\161\233\177\223\376\064\147\204\116\231\353\374\263\170 +\011\063\160\272\146\246\166\355\033\163\353\032\245\015\304\042 +\023\040\224\126\012\116\054\154\116\261\375\317\234\011\272\242 +\063\355\207\002\003\001\000\001\243\143\060\141\060\035\006\003 +\125\035\016\004\026\004\024\335\004\011\007\242\365\172\175\122 +\123\022\222\225\356\070\200\045\015\246\131\060\017\006\003\125 +\035\023\001\001\377\004\005\060\003\001\001\377\060\037\006\003 +\125\035\043\004\030\060\026\200\024\335\004\011\007\242\365\172 +\175\122\123\022\222\225\356\070\200\045\015\246\131\060\016\006 +\003\125\035\017\001\001\377\004\004\003\002\001\206\060\015\006 +\011\052\206\110\206\367\015\001\001\013\005\000\003\202\002\001 +\000\040\030\021\224\051\373\046\235\034\036\036\160\141\361\225 +\162\223\161\044\255\150\223\130\216\062\257\033\263\160\003\374 +\045\053\164\205\220\075\170\152\364\271\213\245\227\073\265\030 +\221\273\036\247\371\100\133\221\371\125\231\257\036\021\320\134 +\035\247\146\343\261\224\007\014\062\071\246\352\033\260\171\330 +\035\234\160\104\343\212\335\304\371\225\037\212\070\103\077\001 +\205\245\107\247\075\106\262\274\345\042\150\367\173\234\330\054 +\076\012\041\310\055\063\254\277\305\201\231\061\164\301\165\161 +\305\276\261\360\043\105\364\235\153\374\031\143\235\243\274\004 +\306\030\013\045\273\123\211\017\263\200\120\336\105\356\104\177 +\253\224\170\144\230\323\366\050\335\207\330\160\145\164\373\016 +\271\023\353\247\017\141\251\062\226\314\336\273\355\143\114\030 +\273\251\100\367\240\124\156\040\210\161\165\030\352\172\264\064 +\162\340\043\047\167\134\266\220\352\206\045\100\253\357\063\017 +\313\237\202\276\242\040\373\366\265\055\032\346\302\205\261\164 +\017\373\310\145\002\244\122\001\107\335\111\042\301\277\330\353 +\153\254\176\336\354\143\063\025\267\043\010\217\306\017\215\101 +\132\335\216\305\271\217\345\105\077\170\333\272\322\033\100\261 +\376\161\115\077\340\201\242\272\136\264\354\025\340\223\335\010 +\037\176\341\125\231\013\041\336\223\236\012\373\346\243\111\275 +\066\060\376\347\167\262\240\165\227\265\055\201\210\027\145\040 +\367\332\220\000\237\311\122\314\062\312\065\174\365\075\017\330 +\053\327\365\046\154\311\006\064\226\026\352\160\131\032\062\171 +\171\013\266\210\177\017\122\110\075\277\154\330\242\104\056\321 +\116\267\162\130\323\211\023\225\376\104\253\370\327\213\033\156 +\234\274\054\240\133\325\152\000\257\137\067\341\325\372\020\013 +\230\234\206\347\046\217\316\360\354\156\212\127\013\200\343\116 +\262\300\240\143\141\220\272\125\150\067\164\152\266\222\333\237 +\241\206\042\266\145\047\016\354\266\237\102\140\344\147\302\265 +\332\101\013\304\323\213\141\033\274\372\037\221\053\327\104\007 +\136\272\051\254\331\305\351\357\123\110\132\353\200\361\050\130 +\041\315\260\006\125\373\047\077\123\220\160\251\004\036\127\047 +\271 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE + +# Trust for "SSL.com Root Certification Authority RSA" +# Issuer: CN=SSL.com Root Certification Authority RSA,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Serial Number:7b:2c:9b:d3:16:80:32:99 +# Subject: CN=SSL.com Root Certification Authority RSA,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Not Valid Before: Fri Feb 12 17:39:39 2016 +# Not Valid After : Tue Feb 12 17:39:39 2041 +# Fingerprint (SHA-256): 85:66:6A:56:2E:E0:BE:5C:E9:25:C1:D8:89:0A:6F:76:A8:7E:C1:6D:4D:7D:5F:29:EA:74:19:CF:20:12:3B:69 +# Fingerprint (SHA1): B7:AB:33:08:D1:EA:44:77:BA:14:80:12:5A:6F:BD:A9:36:49:0C:BB +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "SSL.com Root Certification Authority RSA" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\267\253\063\010\321\352\104\167\272\024\200\022\132\157\275\251 +\066\111\014\273 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\206\151\022\300\160\361\354\254\254\302\325\274\245\133\241\051 +END +CKA_ISSUER MULTILINE_OCTAL +\060\174\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\061\060\057\006 +\003\125\004\003\014\050\123\123\114\056\143\157\155\040\122\157 +\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157\156 +\040\101\165\164\150\157\162\151\164\171\040\122\123\101 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\173\054\233\323\026\200\062\231 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "SSL.com Root Certification Authority ECC" +# +# Issuer: CN=SSL.com Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Serial Number:75:e6:df:cb:c1:68:5b:a8 +# Subject: CN=SSL.com Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Not Valid Before: Fri Feb 12 18:14:03 2016 +# Not Valid After : Tue Feb 12 18:14:03 2041 +# Fingerprint (SHA-256): 34:17:BB:06:CC:60:07:DA:1B:96:1C:92:0B:8A:B4:CE:3F:AD:82:0E:4A:A3:0B:9A:CB:C4:A7:4E:BD:CE:BC:65 +# Fingerprint (SHA1): C3:19:7C:39:24:E6:54:AF:1B:C4:AB:20:95:7A:E2:C3:0E:13:02:6A +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "SSL.com Root Certification Authority ECC" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\174\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\061\060\057\006 +\003\125\004\003\014\050\123\123\114\056\143\157\155\040\122\157 +\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157\156 +\040\101\165\164\150\157\162\151\164\171\040\105\103\103 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\174\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\061\060\057\006 +\003\125\004\003\014\050\123\123\114\056\143\157\155\040\122\157 +\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157\156 +\040\101\165\164\150\157\162\151\164\171\040\105\103\103 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\165\346\337\313\301\150\133\250 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\215\060\202\002\024\240\003\002\001\002\002\010\165 +\346\337\313\301\150\133\250\060\012\006\010\052\206\110\316\075 +\004\003\002\060\174\061\013\060\011\006\003\125\004\006\023\002 +\125\123\061\016\060\014\006\003\125\004\010\014\005\124\145\170 +\141\163\061\020\060\016\006\003\125\004\007\014\007\110\157\165 +\163\164\157\156\061\030\060\026\006\003\125\004\012\014\017\123 +\123\114\040\103\157\162\160\157\162\141\164\151\157\156\061\061 +\060\057\006\003\125\004\003\014\050\123\123\114\056\143\157\155 +\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 +\151\157\156\040\101\165\164\150\157\162\151\164\171\040\105\103 +\103\060\036\027\015\061\066\060\062\061\062\061\070\061\064\060 +\063\132\027\015\064\061\060\062\061\062\061\070\061\064\060\063 +\132\060\174\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163 +\061\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164 +\157\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114 +\040\103\157\162\160\157\162\141\164\151\157\156\061\061\060\057 +\006\003\125\004\003\014\050\123\123\114\056\143\157\155\040\122 +\157\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157 +\156\040\101\165\164\150\157\162\151\164\171\040\105\103\103\060 +\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201 +\004\000\042\003\142\000\004\105\156\251\120\304\246\043\066\236 +\137\050\215\027\313\226\042\144\077\334\172\216\035\314\010\263 +\242\161\044\272\216\111\271\004\033\107\226\130\253\055\225\310 +\355\236\010\065\310\047\353\211\214\123\130\353\142\212\376\360 +\133\017\153\061\122\143\101\073\211\315\354\354\266\215\031\323 +\064\007\334\273\306\006\177\302\105\225\354\313\177\250\043\340 +\011\351\201\372\363\107\323\243\143\060\141\060\035\006\003\125 +\035\016\004\026\004\024\202\321\205\163\060\347\065\004\323\216 +\002\222\373\345\244\321\304\041\350\315\060\017\006\003\125\035 +\023\001\001\377\004\005\060\003\001\001\377\060\037\006\003\125 +\035\043\004\030\060\026\200\024\202\321\205\163\060\347\065\004 +\323\216\002\222\373\345\244\321\304\041\350\315\060\016\006\003 +\125\035\017\001\001\377\004\004\003\002\001\206\060\012\006\010 +\052\206\110\316\075\004\003\002\003\147\000\060\144\002\060\157 +\347\353\131\021\244\140\317\141\260\226\173\355\005\371\057\023 +\221\334\355\345\374\120\153\021\106\106\263\034\041\000\142\273 +\276\303\347\350\315\007\231\371\015\013\135\162\076\304\252\002 +\060\037\274\272\013\342\060\044\373\174\155\200\125\012\231\076 +\200\015\063\345\146\243\263\243\273\245\325\213\217\011\054\246 +\135\176\342\360\007\010\150\155\322\174\151\156\137\337\345\152 +\145 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE + +# Trust for "SSL.com Root Certification Authority ECC" +# Issuer: CN=SSL.com Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Serial Number:75:e6:df:cb:c1:68:5b:a8 +# Subject: CN=SSL.com Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Not Valid Before: Fri Feb 12 18:14:03 2016 +# Not Valid After : Tue Feb 12 18:14:03 2041 +# Fingerprint (SHA-256): 34:17:BB:06:CC:60:07:DA:1B:96:1C:92:0B:8A:B4:CE:3F:AD:82:0E:4A:A3:0B:9A:CB:C4:A7:4E:BD:CE:BC:65 +# Fingerprint (SHA1): C3:19:7C:39:24:E6:54:AF:1B:C4:AB:20:95:7A:E2:C3:0E:13:02:6A +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "SSL.com Root Certification Authority ECC" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\303\031\174\071\044\346\124\257\033\304\253\040\225\172\342\303 +\016\023\002\152 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\056\332\344\071\177\234\217\067\321\160\237\046\027\121\072\216 +END +CKA_ISSUER MULTILINE_OCTAL +\060\174\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\061\060\057\006 +\003\125\004\003\014\050\123\123\114\056\143\157\155\040\122\157 +\157\164\040\103\145\162\164\151\146\151\143\141\164\151\157\156 +\040\101\165\164\150\157\162\151\164\171\040\105\103\103 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\165\346\337\313\301\150\133\250 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "SSL.com EV Root Certification Authority RSA R2" +# +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Serial Number:56:b6:29:cd:34:bc:78:f6 +# Subject: CN=SSL.com EV Root Certification Authority RSA R2,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Not Valid Before: Wed May 31 18:14:37 2017 +# Not Valid After : Fri May 30 18:14:37 2042 +# Fingerprint (SHA-256): 2E:7B:F1:6C:C2:24:85:A7:BB:E2:AA:86:96:75:07:61:B0:AE:39:BE:3B:2F:E9:D0:CC:6D:4E:F7:34:91:42:5C +# Fingerprint (SHA1): 74:3A:F0:52:9B:D0:32:A0:F4:4A:83:CD:D4:BA:A9:7B:7C:2E:C4:9A +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "SSL.com EV Root Certification Authority RSA R2" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\201\202\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163 +\061\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164 +\157\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114 +\040\103\157\162\160\157\162\141\164\151\157\156\061\067\060\065 +\006\003\125\004\003\014\056\123\123\114\056\143\157\155\040\105 +\126\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141 +\164\151\157\156\040\101\165\164\150\157\162\151\164\171\040\122 +\123\101\040\122\062 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\201\202\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163 +\061\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164 +\157\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114 +\040\103\157\162\160\157\162\141\164\151\157\156\061\067\060\065 +\006\003\125\004\003\014\056\123\123\114\056\143\157\155\040\105 +\126\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141 +\164\151\157\156\040\101\165\164\150\157\162\151\164\171\040\122 +\123\101\040\122\062 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\126\266\051\315\064\274\170\366 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\005\353\060\202\003\323\240\003\002\001\002\002\010\126 +\266\051\315\064\274\170\366\060\015\006\011\052\206\110\206\367 +\015\001\001\013\005\000\060\201\202\061\013\060\011\006\003\125 +\004\006\023\002\125\123\061\016\060\014\006\003\125\004\010\014 +\005\124\145\170\141\163\061\020\060\016\006\003\125\004\007\014 +\007\110\157\165\163\164\157\156\061\030\060\026\006\003\125\004 +\012\014\017\123\123\114\040\103\157\162\160\157\162\141\164\151 +\157\156\061\067\060\065\006\003\125\004\003\014\056\123\123\114 +\056\143\157\155\040\105\126\040\122\157\157\164\040\103\145\162 +\164\151\146\151\143\141\164\151\157\156\040\101\165\164\150\157 +\162\151\164\171\040\122\123\101\040\122\062\060\036\027\015\061 +\067\060\065\063\061\061\070\061\064\063\067\132\027\015\064\062 +\060\065\063\060\061\070\061\064\063\067\132\060\201\202\061\013 +\060\011\006\003\125\004\006\023\002\125\123\061\016\060\014\006 +\003\125\004\010\014\005\124\145\170\141\163\061\020\060\016\006 +\003\125\004\007\014\007\110\157\165\163\164\157\156\061\030\060 +\026\006\003\125\004\012\014\017\123\123\114\040\103\157\162\160 +\157\162\141\164\151\157\156\061\067\060\065\006\003\125\004\003 +\014\056\123\123\114\056\143\157\155\040\105\126\040\122\157\157 +\164\040\103\145\162\164\151\146\151\143\141\164\151\157\156\040 +\101\165\164\150\157\162\151\164\171\040\122\123\101\040\122\062 +\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001 +\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001 +\000\217\066\145\100\341\326\115\300\327\264\351\106\332\153\352 +\063\107\315\114\371\175\175\276\275\055\075\360\333\170\341\206 +\245\331\272\011\127\150\355\127\076\240\320\010\101\203\347\050 +\101\044\037\343\162\025\320\001\032\373\136\160\043\262\313\237 +\071\343\317\305\116\306\222\155\046\306\173\273\263\332\047\235 +\012\206\351\201\067\005\376\360\161\161\354\303\034\351\143\242 +\027\024\235\357\033\147\323\205\125\002\002\326\111\311\314\132 +\341\261\367\157\062\237\311\324\073\210\101\250\234\275\313\253 +\333\155\173\011\037\242\114\162\220\332\053\010\374\317\074\124 +\316\147\017\250\317\135\226\031\013\304\343\162\353\255\321\175 +\035\047\357\222\353\020\277\133\353\073\257\317\200\335\301\322 +\226\004\133\172\176\244\251\074\070\166\244\142\216\240\071\136 +\352\167\317\135\000\131\217\146\054\076\007\242\243\005\046\021 +\151\227\352\205\267\017\226\013\113\310\100\341\120\272\056\212 +\313\367\017\232\042\347\177\232\067\023\315\362\115\023\153\041 +\321\300\314\042\362\241\106\366\104\151\234\312\141\065\007\000 +\157\326\141\010\021\352\272\270\366\351\263\140\345\115\271\354 +\237\024\146\311\127\130\333\315\207\151\370\212\206\022\003\107 +\277\146\023\166\254\167\175\064\044\205\203\315\327\252\234\220 +\032\237\041\054\177\170\267\144\270\330\350\246\364\170\263\125 +\313\204\322\062\304\170\256\243\217\141\335\316\010\123\255\354 +\210\374\025\344\232\015\346\237\032\167\316\114\217\270\024\025 +\075\142\234\206\070\006\000\146\022\344\131\166\132\123\300\002 +\230\242\020\053\150\104\173\216\171\316\063\112\166\252\133\201 +\026\033\265\212\330\320\000\173\136\142\264\011\326\206\143\016 +\246\005\225\111\272\050\213\210\223\262\064\034\330\244\125\156 +\267\034\320\336\231\125\073\043\364\042\340\371\051\146\046\354 +\040\120\167\333\112\013\217\276\345\002\140\160\101\136\324\256 +\120\071\042\024\046\313\262\073\163\164\125\107\007\171\201\071 +\250\060\023\104\345\004\212\256\226\023\045\102\017\271\123\304 +\233\374\315\344\034\336\074\372\253\326\006\112\037\147\246\230 +\060\034\335\054\333\334\030\225\127\146\306\377\134\213\126\365 +\167\002\003\001\000\001\243\143\060\141\060\017\006\003\125\035 +\023\001\001\377\004\005\060\003\001\001\377\060\037\006\003\125 +\035\043\004\030\060\026\200\024\371\140\273\324\343\325\064\366 +\270\365\006\200\045\247\163\333\106\151\250\236\060\035\006\003 +\125\035\016\004\026\004\024\371\140\273\324\343\325\064\366\270 +\365\006\200\045\247\163\333\106\151\250\236\060\016\006\003\125 +\035\017\001\001\377\004\004\003\002\001\206\060\015\006\011\052 +\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000\126 +\263\216\313\012\235\111\216\277\244\304\221\273\146\027\005\121 +\230\165\373\345\120\054\172\236\361\024\372\253\323\212\076\377 +\221\051\217\143\213\330\264\251\124\001\015\276\223\206\057\371 +\112\155\307\136\365\127\371\312\125\034\022\276\107\017\066\305 +\337\152\267\333\165\302\107\045\177\271\361\143\370\150\055\125 +\004\321\362\215\260\244\317\274\074\136\037\170\347\245\240\040 +\160\260\004\305\267\367\162\247\336\042\015\275\063\045\106\214 +\144\222\046\343\076\056\143\226\332\233\214\075\370\030\011\327 +\003\314\175\206\202\340\312\004\007\121\120\327\377\222\325\014 +\357\332\206\237\231\327\353\267\257\150\342\071\046\224\272\150 +\267\277\203\323\352\172\147\075\142\147\256\045\345\162\350\342 +\344\354\256\022\366\113\053\074\237\351\260\100\363\070\124\263 +\375\267\150\310\332\306\217\121\074\262\373\221\334\034\347\233 +\235\341\267\015\162\217\342\244\304\251\170\371\353\024\254\306 +\103\005\302\145\071\050\030\002\303\202\262\235\005\276\145\355 +\226\137\145\164\074\373\011\065\056\173\234\023\375\033\017\135 +\307\155\201\072\126\017\314\073\341\257\002\057\042\254\106\312 +\106\074\240\034\114\326\104\264\136\056\134\025\146\011\341\046 +\051\376\306\122\141\272\261\163\377\303\014\234\345\154\152\224 +\077\024\312\100\026\225\204\363\131\251\254\137\114\141\223\155 +\321\073\314\242\225\014\042\246\147\147\104\056\271\331\322\212 +\101\263\146\013\132\373\175\043\245\362\032\260\377\336\233\203 +\224\056\321\077\337\222\267\221\257\005\073\145\307\240\154\261 +\315\142\022\303\220\033\343\045\316\064\274\157\167\166\261\020 +\303\367\005\032\300\326\257\164\142\110\027\167\222\151\220\141 +\034\336\225\200\164\124\217\030\034\303\363\003\320\277\244\103 +\165\206\123\030\172\012\056\011\034\066\237\221\375\202\212\042 +\113\321\016\120\045\335\313\003\014\027\311\203\000\010\116\065 +\115\212\213\355\360\002\224\146\054\104\177\313\225\047\226\027 +\255\011\060\254\266\161\027\156\213\027\366\034\011\324\055\073 +\230\245\161\323\124\023\331\140\363\365\113\146\117\372\361\356 +\040\022\215\264\254\127\261\105\143\241\254\166\251\302\373 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE + +# Trust for "SSL.com EV Root Certification Authority RSA R2" +# Issuer: CN=SSL.com EV Root Certification Authority RSA R2,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Serial Number:56:b6:29:cd:34:bc:78:f6 +# Subject: CN=SSL.com EV Root Certification Authority RSA R2,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Not Valid Before: Wed May 31 18:14:37 2017 +# Not Valid After : Fri May 30 18:14:37 2042 +# Fingerprint (SHA-256): 2E:7B:F1:6C:C2:24:85:A7:BB:E2:AA:86:96:75:07:61:B0:AE:39:BE:3B:2F:E9:D0:CC:6D:4E:F7:34:91:42:5C +# Fingerprint (SHA1): 74:3A:F0:52:9B:D0:32:A0:F4:4A:83:CD:D4:BA:A9:7B:7C:2E:C4:9A +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "SSL.com EV Root Certification Authority RSA R2" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\164\072\360\122\233\320\062\240\364\112\203\315\324\272\251\173 +\174\056\304\232 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\341\036\061\130\032\256\124\123\002\366\027\152\021\173\115\225 +END +CKA_ISSUER MULTILINE_OCTAL +\060\201\202\061\013\060\011\006\003\125\004\006\023\002\125\123 +\061\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163 +\061\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164 +\157\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114 +\040\103\157\162\160\157\162\141\164\151\157\156\061\067\060\065 +\006\003\125\004\003\014\056\123\123\114\056\143\157\155\040\105 +\126\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141 +\164\151\157\156\040\101\165\164\150\157\162\151\164\171\040\122 +\123\101\040\122\062 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\126\266\051\315\064\274\170\366 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE + +# +# Certificate "SSL.com EV Root Certification Authority ECC" +# +# Issuer: CN=SSL.com EV Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Serial Number:2c:29:9c:5b:16:ed:05:95 +# Subject: CN=SSL.com EV Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Not Valid Before: Fri Feb 12 18:15:23 2016 +# Not Valid After : Tue Feb 12 18:15:23 2041 +# Fingerprint (SHA-256): 22:A2:C1:F7:BD:ED:70:4C:C1:E7:01:B5:F4:08:C3:10:88:0F:E9:56:B5:DE:2A:4A:44:F9:9C:87:3A:25:A7:C8 +# Fingerprint (SHA1): 4C:DD:51:A3:D1:F5:20:32:14:B0:C6:C5:32:23:03:91:C7:46:42:6D +CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "SSL.com EV Root Certification Authority ECC" +CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509 +CKA_SUBJECT MULTILINE_OCTAL +\060\177\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\064\060\062\006 +\003\125\004\003\014\053\123\123\114\056\143\157\155\040\105\126 +\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 +\151\157\156\040\101\165\164\150\157\162\151\164\171\040\105\103 +\103 +END +CKA_ID UTF8 "0" +CKA_ISSUER MULTILINE_OCTAL +\060\177\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\064\060\062\006 +\003\125\004\003\014\053\123\123\114\056\143\157\155\040\105\126 +\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 +\151\157\156\040\101\165\164\150\157\162\151\164\171\040\105\103 +\103 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\054\051\234\133\026\355\005\225 +END +CKA_VALUE MULTILINE_OCTAL +\060\202\002\224\060\202\002\032\240\003\002\001\002\002\010\054 +\051\234\133\026\355\005\225\060\012\006\010\052\206\110\316\075 +\004\003\002\060\177\061\013\060\011\006\003\125\004\006\023\002 +\125\123\061\016\060\014\006\003\125\004\010\014\005\124\145\170 +\141\163\061\020\060\016\006\003\125\004\007\014\007\110\157\165 +\163\164\157\156\061\030\060\026\006\003\125\004\012\014\017\123 +\123\114\040\103\157\162\160\157\162\141\164\151\157\156\061\064 +\060\062\006\003\125\004\003\014\053\123\123\114\056\143\157\155 +\040\105\126\040\122\157\157\164\040\103\145\162\164\151\146\151 +\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164\171 +\040\105\103\103\060\036\027\015\061\066\060\062\061\062\061\070 +\061\065\062\063\132\027\015\064\061\060\062\061\062\061\070\061 +\065\062\063\132\060\177\061\013\060\011\006\003\125\004\006\023 +\002\125\123\061\016\060\014\006\003\125\004\010\014\005\124\145 +\170\141\163\061\020\060\016\006\003\125\004\007\014\007\110\157 +\165\163\164\157\156\061\030\060\026\006\003\125\004\012\014\017 +\123\123\114\040\103\157\162\160\157\162\141\164\151\157\156\061 +\064\060\062\006\003\125\004\003\014\053\123\123\114\056\143\157 +\155\040\105\126\040\122\157\157\164\040\103\145\162\164\151\146 +\151\143\141\164\151\157\156\040\101\165\164\150\157\162\151\164 +\171\040\105\103\103\060\166\060\020\006\007\052\206\110\316\075 +\002\001\006\005\053\201\004\000\042\003\142\000\004\252\022\107 +\220\230\033\373\357\303\100\007\203\040\116\361\060\202\242\006 +\321\362\222\206\141\362\366\041\150\312\000\304\307\352\103\000 +\124\206\334\375\037\337\000\270\101\142\134\334\160\026\062\336 +\037\231\324\314\305\007\310\010\037\141\026\007\121\075\175\134 +\007\123\343\065\070\214\337\315\237\331\056\015\112\266\031\056 +\132\160\132\006\355\276\360\241\260\312\320\011\051\243\143\060 +\141\060\035\006\003\125\035\016\004\026\004\024\133\312\136\345 +\336\322\201\252\315\250\055\144\121\266\331\162\233\227\346\117 +\060\017\006\003\125\035\023\001\001\377\004\005\060\003\001\001 +\377\060\037\006\003\125\035\043\004\030\060\026\200\024\133\312 +\136\345\336\322\201\252\315\250\055\144\121\266\331\162\233\227 +\346\117\060\016\006\003\125\035\017\001\001\377\004\004\003\002 +\001\206\060\012\006\010\052\206\110\316\075\004\003\002\003\150 +\000\060\145\002\061\000\212\346\100\211\067\353\351\325\023\331 +\312\324\153\044\363\260\075\207\106\130\032\354\261\337\157\373 +\126\272\160\153\307\070\314\350\261\214\117\017\367\361\147\166 +\016\203\320\036\121\217\002\060\075\366\043\050\046\114\306\140 +\207\223\046\233\262\065\036\272\326\367\074\321\034\316\372\045 +\074\246\032\201\025\133\363\022\017\154\356\145\212\311\207\250 +\371\007\340\142\232\214\134\112 +END +CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE + +# Trust for "SSL.com EV Root Certification Authority ECC" +# Issuer: CN=SSL.com EV Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Serial Number:2c:29:9c:5b:16:ed:05:95 +# Subject: CN=SSL.com EV Root Certification Authority ECC,O=SSL Corporation,L=Houston,ST=Texas,C=US +# Not Valid Before: Fri Feb 12 18:15:23 2016 +# Not Valid After : Tue Feb 12 18:15:23 2041 +# Fingerprint (SHA-256): 22:A2:C1:F7:BD:ED:70:4C:C1:E7:01:B5:F4:08:C3:10:88:0F:E9:56:B5:DE:2A:4A:44:F9:9C:87:3A:25:A7:C8 +# Fingerprint (SHA1): 4C:DD:51:A3:D1:F5:20:32:14:B0:C6:C5:32:23:03:91:C7:46:42:6D +CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST +CKA_TOKEN CK_BBOOL CK_TRUE +CKA_PRIVATE CK_BBOOL CK_FALSE +CKA_MODIFIABLE CK_BBOOL CK_FALSE +CKA_LABEL UTF8 "SSL.com EV Root Certification Authority ECC" +CKA_CERT_SHA1_HASH MULTILINE_OCTAL +\114\335\121\243\321\365\040\062\024\260\306\305\062\043\003\221 +\307\106\102\155 +END +CKA_CERT_MD5_HASH MULTILINE_OCTAL +\131\123\042\145\203\102\001\124\300\316\102\271\132\174\362\220 +END +CKA_ISSUER MULTILINE_OCTAL +\060\177\061\013\060\011\006\003\125\004\006\023\002\125\123\061 +\016\060\014\006\003\125\004\010\014\005\124\145\170\141\163\061 +\020\060\016\006\003\125\004\007\014\007\110\157\165\163\164\157 +\156\061\030\060\026\006\003\125\004\012\014\017\123\123\114\040 +\103\157\162\160\157\162\141\164\151\157\156\061\064\060\062\006 +\003\125\004\003\014\053\123\123\114\056\143\157\155\040\105\126 +\040\122\157\157\164\040\103\145\162\164\151\146\151\143\141\164 +\151\157\156\040\101\165\164\150\157\162\151\164\171\040\105\103 +\103 +END +CKA_SERIAL_NUMBER MULTILINE_OCTAL +\002\010\054\051\234\133\026\355\005\225 +END +CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR +CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST +CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE diff --git a/security/nss/lib/ckfw/builtins/nssckbi.h b/security/nss/lib/ckfw/builtins/nssckbi.h index 498751d13dbb..b3bc04a38a5f 100644 --- a/security/nss/lib/ckfw/builtins/nssckbi.h +++ b/security/nss/lib/ckfw/builtins/nssckbi.h @@ -46,8 +46,8 @@ * It's recommend to switch back to 0 after having reached version 98/99. */ #define NSS_BUILTINS_LIBRARY_VERSION_MAJOR 2 -#define NSS_BUILTINS_LIBRARY_VERSION_MINOR 16 -#define NSS_BUILTINS_LIBRARY_VERSION "2.16" +#define NSS_BUILTINS_LIBRARY_VERSION_MINOR 18 +#define NSS_BUILTINS_LIBRARY_VERSION "2.18" /* These version numbers detail the semantic changes to the ckfw engine. */ #define NSS_BUILTINS_HARDWARE_VERSION_MAJOR 1 diff --git a/security/nss/lib/cryptohi/cryptohi.h b/security/nss/lib/cryptohi/cryptohi.h index f658daa9eff9..e529fa34f5c8 100644 --- a/security/nss/lib/cryptohi/cryptohi.h +++ b/security/nss/lib/cryptohi/cryptohi.h @@ -59,6 +59,14 @@ extern SECItem *DSAU_DecodeDerSigToLen(const SECItem *item, unsigned int len); */ extern SGNContext *SGN_NewContext(SECOidTag alg, SECKEYPrivateKey *privKey); +/* +** Create a new signature context from an algorithmID. +** "alg" the signature algorithm to use +** "privKey" the private key to use +*/ +extern SGNContext *SGN_NewContextWithAlgorithmID(SECAlgorithmID *alg, + SECKEYPrivateKey *privKey); + /* ** Destroy a signature-context object ** "cx" the object @@ -105,6 +113,21 @@ extern SECStatus SEC_SignData(SECItem *result, const unsigned char *buf, int len, SECKEYPrivateKey *pk, SECOidTag algid); +/* +** Sign a single block of data using private key encryption and given +** signature/hash algorithm with parameters from an algorithmID. +** "result" the final signature data (memory is allocated) +** "buf" the input data to sign +** "len" the amount of data to sign +** "pk" the private key to encrypt with +** "algid" the signature/hash algorithm to sign with +** (must be compatible with the key type). +*/ +extern SECStatus SEC_SignDataWithAlgorithmID(SECItem *result, + const unsigned char *buf, int len, + SECKEYPrivateKey *pk, + SECAlgorithmID *algid); + /* ** Sign a pre-digested block of data using private key encryption, encoding ** The given signature/hash algorithm. @@ -131,6 +154,27 @@ extern SECStatus SEC_DerSignData(PLArenaPool *arena, SECItem *result, const unsigned char *buf, int len, SECKEYPrivateKey *pk, SECOidTag algid); +/* +** DER sign a single block of data using private key encryption and +** the given signature/hash algorithm with parameters from an +** algorithmID. This routine first computes a digital signature using +** SEC_SignData, then wraps it with an CERTSignedData and then der +** encodes the result. +** "arena" is the memory arena to use to allocate data from +** "result" the final der encoded data (memory is allocated) +** "buf" the input data to sign +** "len" the amount of data to sign +** "pk" the private key to encrypt with +** "algid" the signature/hash algorithm to sign with +** (must be compatible with the key type). +*/ +extern SECStatus SEC_DerSignDataWithAlgorithmID(PLArenaPool *arena, + SECItem *result, + const unsigned char *buf, + int len, + SECKEYPrivateKey *pk, + SECAlgorithmID *algid); + /* ** Destroy a signed-data object. ** "sd" the object @@ -146,6 +190,23 @@ extern void SEC_DestroySignedData(CERTSignedData *sd, PRBool freeit); extern SECOidTag SEC_GetSignatureAlgorithmOidTag(KeyType keyType, SECOidTag hashAlgTag); +/* +** Create algorithm parameters for signing. Return a new item +** allocated from arena, or NULL on failure. +** "arena" is the memory arena to use to allocate data from +** "result" the encoded parameters (memory is allocated) +** "signAlgTag" is the signing algorithm +** "hashAlgTag" is the preferred hash algorithm +** "params" is the default parameters +** "key" is the private key +*/ +extern SECItem *SEC_CreateSignatureAlgorithmParameters(PLArenaPool *arena, + SECItem *result, + SECOidTag signAlgTag, + SECOidTag hashAlgTag, + const SECItem *params, + const SECKEYPrivateKey *key); + /****************************************/ /* ** Signature verification operations diff --git a/security/nss/lib/cryptohi/keyi.h b/security/nss/lib/cryptohi/keyi.h index f8f5f7f7dae8..ee11fc905e16 100644 --- a/security/nss/lib/cryptohi/keyi.h +++ b/security/nss/lib/cryptohi/keyi.h @@ -17,6 +17,9 @@ KeyType seckey_GetKeyType(SECOidTag pubKeyOid); SECStatus sec_DecodeSigAlg(const SECKEYPublicKey *key, SECOidTag sigAlg, const SECItem *param, SECOidTag *encalg, SECOidTag *hashalg); +SECStatus sec_RSAPSSParamsToMechanism(CK_RSA_PKCS_PSS_PARAMS *mech, + const SECKEYRSAPSSParams *params); + SEC_END_PROTOS #endif /* _KEYHI_H_ */ diff --git a/security/nss/lib/cryptohi/seckey.c b/security/nss/lib/cryptohi/seckey.c index 9ea48b7677ec..f30052213354 100644 --- a/security/nss/lib/cryptohi/seckey.c +++ b/security/nss/lib/cryptohi/seckey.c @@ -1048,6 +1048,7 @@ SECKEY_SignatureLen(const SECKEYPublicKey *pubk) switch (pubk->keyType) { case rsaKey: + case rsaPssKey: b0 = pubk->u.rsa.modulus.data[0]; return b0 ? pubk->u.rsa.modulus.len : pubk->u.rsa.modulus.len - 1; case dsaKey: @@ -1974,3 +1975,92 @@ SECKEY_GetECCOid(const SECKEYECParams *params) return oidData->offset; } + +static CK_MECHANISM_TYPE +sec_GetHashMechanismByOidTag(SECOidTag tag) +{ + switch (tag) { + case SEC_OID_SHA512: + return CKM_SHA512; + case SEC_OID_SHA384: + return CKM_SHA384; + case SEC_OID_SHA256: + return CKM_SHA256; + default: + PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); + /* fallthrough */ + case SEC_OID_SHA1: + break; + } + return CKM_SHA_1; +} + +static CK_RSA_PKCS_MGF_TYPE +sec_GetMgfTypeByOidTag(SECOidTag tag) +{ + switch (tag) { + case SEC_OID_SHA512: + return CKG_MGF1_SHA512; + case SEC_OID_SHA384: + return CKG_MGF1_SHA384; + case SEC_OID_SHA256: + return CKG_MGF1_SHA256; + default: + PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); + /* fallthrough */ + case SEC_OID_SHA1: + break; + } + return CKG_MGF1_SHA1; +} + +SECStatus +sec_RSAPSSParamsToMechanism(CK_RSA_PKCS_PSS_PARAMS *mech, + const SECKEYRSAPSSParams *params) +{ + SECStatus rv = SECSuccess; + SECOidTag hashAlgTag; + unsigned long saltLength; + + PORT_Memset(mech, 0, sizeof(CK_RSA_PKCS_PSS_PARAMS)); + + if (params->hashAlg) { + hashAlgTag = SECOID_GetAlgorithmTag(params->hashAlg); + } else { + hashAlgTag = SEC_OID_SHA1; /* default, SHA-1 */ + } + mech->hashAlg = sec_GetHashMechanismByOidTag(hashAlgTag); + + if (params->maskAlg) { + SECAlgorithmID maskHashAlg; + SECOidTag maskHashAlgTag; + PORTCheapArenaPool tmpArena; + + if (SECOID_GetAlgorithmTag(params->maskAlg) != SEC_OID_PKCS1_MGF1) { + /* only MGF1 is known to PKCS#11 */ + PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); + return SECFailure; + } + + PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE); + rv = SEC_QuickDERDecodeItem(&tmpArena.arena, &maskHashAlg, + SEC_ASN1_GET(SECOID_AlgorithmIDTemplate), + ¶ms->maskAlg->parameters); + PORT_DestroyCheapArena(&tmpArena); + if (rv != SECSuccess) { + return rv; + } + maskHashAlgTag = SECOID_GetAlgorithmTag(&maskHashAlg); + mech->mgf = sec_GetMgfTypeByOidTag(maskHashAlgTag); + } else { + mech->mgf = CKG_MGF1_SHA1; /* default, MGF1 with SHA-1 */ + } + + rv = SEC_ASN1DecodeInteger((SECItem *)¶ms->saltLength, &saltLength); + if (rv != SECSuccess) { + return rv; + } + mech->sLen = saltLength; + + return rv; +} diff --git a/security/nss/lib/cryptohi/secsign.c b/security/nss/lib/cryptohi/secsign.c index d06cb2e852da..693e79c65a7d 100644 --- a/security/nss/lib/cryptohi/secsign.c +++ b/security/nss/lib/cryptohi/secsign.c @@ -22,10 +22,11 @@ struct SGNContextStr { void *hashcx; const SECHashObject *hashobj; SECKEYPrivateKey *key; + SECItem *params; }; -SGNContext * -SGN_NewContext(SECOidTag alg, SECKEYPrivateKey *key) +static SGNContext * +sgn_NewContext(SECOidTag alg, SECItem *params, SECKEYPrivateKey *key) { SGNContext *cx; SECOidTag hashalg, signalg; @@ -40,7 +41,7 @@ SGN_NewContext(SECOidTag alg, SECKEYPrivateKey *key) * it may just support CKM_SHA1_RSA_PKCS and/or CKM_MD5_RSA_PKCS. */ /* we have a private key, not a public key, so don't pass it in */ - rv = sec_DecodeSigAlg(NULL, alg, NULL, &signalg, &hashalg); + rv = sec_DecodeSigAlg(NULL, alg, params, &signalg, &hashalg); if (rv != SECSuccess) { PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); return 0; @@ -49,7 +50,8 @@ SGN_NewContext(SECOidTag alg, SECKEYPrivateKey *key) /* verify our key type */ if (key->keyType != keyType && - !((key->keyType == dsaKey) && (keyType == fortezzaKey))) { + !((key->keyType == dsaKey) && (keyType == fortezzaKey)) && + !((key->keyType == rsaKey) && (keyType == rsaPssKey))) { PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); return 0; } @@ -59,10 +61,24 @@ SGN_NewContext(SECOidTag alg, SECKEYPrivateKey *key) cx->hashalg = hashalg; cx->signalg = signalg; cx->key = key; + cx->params = params; } return cx; } +SGNContext * +SGN_NewContext(SECOidTag alg, SECKEYPrivateKey *key) +{ + return sgn_NewContext(alg, NULL, key); +} + +SGNContext * +SGN_NewContextWithAlgorithmID(SECAlgorithmID *alg, SECKEYPrivateKey *key) +{ + SECOidTag tag = SECOID_GetAlgorithmTag(alg); + return sgn_NewContext(tag, &alg->parameters, key); +} + void SGN_DestroyContext(SGNContext *cx, PRBool freeit) { @@ -148,6 +164,7 @@ SGN_End(SGNContext *cx, SECItem *result) result->data = 0; digder.data = 0; + sigitem.data = 0; /* Finish up digest function */ if (cx->hashcx == NULL) { @@ -156,7 +173,8 @@ SGN_End(SGNContext *cx, SECItem *result) } (*cx->hashobj->end)(cx->hashcx, digest, &part1, sizeof(digest)); - if (privKey->keyType == rsaKey) { + if (privKey->keyType == rsaKey && + cx->signalg != SEC_OID_PKCS1_RSA_PSS_SIGNATURE) { arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); if (!arena) { @@ -200,26 +218,65 @@ SGN_End(SGNContext *cx, SECItem *result) goto loser; } - rv = PK11_Sign(privKey, &sigitem, &digder); - if (rv != SECSuccess) { - PORT_Free(sigitem.data); - sigitem.data = NULL; - goto loser; + if (cx->signalg == SEC_OID_PKCS1_RSA_PSS_SIGNATURE) { + CK_RSA_PKCS_PSS_PARAMS mech; + SECItem mechItem = { siBuffer, (unsigned char *)&mech, sizeof(mech) }; + + PORT_Memset(&mech, 0, sizeof(mech)); + + if (cx->params && cx->params->data) { + SECKEYRSAPSSParams params; + + arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); + if (!arena) { + rv = SECFailure; + goto loser; + } + + PORT_Memset(¶ms, 0, sizeof(params)); + rv = SEC_QuickDERDecodeItem(arena, ¶ms, + SECKEY_RSAPSSParamsTemplate, + cx->params); + if (rv != SECSuccess) { + goto loser; + } + rv = sec_RSAPSSParamsToMechanism(&mech, ¶ms); + if (rv != SECSuccess) { + goto loser; + } + } else { + mech.hashAlg = CKM_SHA_1; + mech.mgf = CKG_MGF1_SHA1; + mech.sLen = digder.len; + } + rv = PK11_SignWithMechanism(privKey, CKM_RSA_PKCS_PSS, &mechItem, + &sigitem, &digder); + if (rv != SECSuccess) { + goto loser; + } + } else { + rv = PK11_Sign(privKey, &sigitem, &digder); + if (rv != SECSuccess) { + goto loser; + } } if ((cx->signalg == SEC_OID_ANSIX9_DSA_SIGNATURE) || (cx->signalg == SEC_OID_ANSIX962_EC_PUBLIC_KEY)) { /* DSAU_EncodeDerSigWithLen works for DSA and ECDSA */ rv = DSAU_EncodeDerSigWithLen(result, &sigitem, sigitem.len); - PORT_Free(sigitem.data); if (rv != SECSuccess) goto loser; + SECITEM_FreeItem(&sigitem, PR_FALSE); } else { result->len = sigitem.len; result->data = sigitem.data; } loser: + if (rv != SECSuccess) { + SECITEM_FreeItem(&sigitem, PR_FALSE); + } SGN_DestroyDigestInfo(di); if (arena != NULL) { PORT_FreeArena(arena, PR_FALSE); @@ -229,18 +286,14 @@ loser: /************************************************************************/ -/* -** Sign a block of data returning in result a bunch of bytes that are the -** signature. Returns zero on success, an error code on failure. -*/ -SECStatus -SEC_SignData(SECItem *res, const unsigned char *buf, int len, - SECKEYPrivateKey *pk, SECOidTag algid) +static SECStatus +sec_SignData(SECItem *res, const unsigned char *buf, int len, + SECKEYPrivateKey *pk, SECOidTag algid, SECItem *params) { SECStatus rv; SGNContext *sgn; - sgn = SGN_NewContext(algid, pk); + sgn = sgn_NewContext(algid, params, pk); if (sgn == NULL) return SECFailure; @@ -260,6 +313,25 @@ loser: return rv; } +/* +** Sign a block of data returning in result a bunch of bytes that are the +** signature. Returns zero on success, an error code on failure. +*/ +SECStatus +SEC_SignData(SECItem *res, const unsigned char *buf, int len, + SECKEYPrivateKey *pk, SECOidTag algid) +{ + return sec_SignData(res, buf, len, pk, algid, NULL); +} + +SECStatus +SEC_SignDataWithAlgorithmID(SECItem *res, const unsigned char *buf, int len, + SECKEYPrivateKey *pk, SECAlgorithmID *algid) +{ + SECOidTag tag = SECOID_GetAlgorithmTag(algid); + return sec_SignData(res, buf, len, pk, tag, &algid->parameters); +} + /************************************************************************/ DERTemplate CERTSignedDataTemplate[] = @@ -294,10 +366,10 @@ const SEC_ASN1Template CERT_SignedDataTemplate[] = SEC_ASN1_CHOOSER_IMPLEMENT(CERT_SignedDataTemplate) -SECStatus -SEC_DerSignData(PLArenaPool *arena, SECItem *result, +static SECStatus +sec_DerSignData(PLArenaPool *arena, SECItem *result, const unsigned char *buf, int len, SECKEYPrivateKey *pk, - SECOidTag algID) + SECOidTag algID, SECItem *params) { SECItem it; CERTSignedData sd; @@ -339,7 +411,7 @@ SEC_DerSignData(PLArenaPool *arena, SECItem *result, } /* Sign input buffer */ - rv = SEC_SignData(&it, buf, len, pk, algID); + rv = sec_SignData(&it, buf, len, pk, algID, params); if (rv) goto loser; @@ -349,7 +421,7 @@ SEC_DerSignData(PLArenaPool *arena, SECItem *result, sd.data.len = len; sd.signature.data = it.data; sd.signature.len = it.len << 3; /* convert to bit string */ - rv = SECOID_SetAlgorithmID(arena, &sd.signatureAlgorithm, algID, 0); + rv = SECOID_SetAlgorithmID(arena, &sd.signatureAlgorithm, algID, params); if (rv) goto loser; @@ -362,6 +434,24 @@ loser: return rv; } +SECStatus +SEC_DerSignData(PLArenaPool *arena, SECItem *result, + const unsigned char *buf, int len, SECKEYPrivateKey *pk, + SECOidTag algID) +{ + return sec_DerSignData(arena, result, buf, len, pk, algID, NULL); +} + +SECStatus +SEC_DerSignDataWithAlgorithmID(PLArenaPool *arena, SECItem *result, + const unsigned char *buf, int len, + SECKEYPrivateKey *pk, + SECAlgorithmID *algID) +{ + SECOidTag tag = SECOID_GetAlgorithmTag(algID); + return sec_DerSignData(arena, result, buf, len, pk, tag, &algID->parameters); +} + SECStatus SGN_Digest(SECKEYPrivateKey *privKey, SECOidTag algtag, SECItem *result, SECItem *digest) @@ -509,3 +599,226 @@ SEC_GetSignatureAlgorithmOidTag(KeyType keyType, SECOidTag hashAlgTag) } return sigTag; } + +static SECItem * +sec_CreateRSAPSSParameters(PLArenaPool *arena, + SECItem *result, + SECOidTag hashAlgTag, + const SECItem *params, + const SECKEYPrivateKey *key) +{ + SECKEYRSAPSSParams pssParams; + int modBytes, hashLength; + unsigned long saltLength; + SECStatus rv; + + if (key->keyType != rsaKey && key->keyType != rsaPssKey) { + PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); + return NULL; + } + + PORT_Memset(&pssParams, 0, sizeof(pssParams)); + + if (params && params->data) { + /* The parameters field should either be empty or contain + * valid RSA-PSS parameters */ + PORT_Assert(!(params->len == 2 && + params->data[0] == SEC_ASN1_NULL && + params->data[1] == 0)); + rv = SEC_QuickDERDecodeItem(arena, &pssParams, + SECKEY_RSAPSSParamsTemplate, + params); + if (rv != SECSuccess) { + return NULL; + } + } + + if (pssParams.trailerField.data) { + unsigned long trailerField; + + rv = SEC_ASN1DecodeInteger((SECItem *)&pssParams.trailerField, + &trailerField); + if (rv != SECSuccess) { + return NULL; + } + if (trailerField != 1) { + PORT_SetError(SEC_ERROR_INVALID_ARGS); + return NULL; + } + } + + modBytes = PK11_GetPrivateModulusLen((SECKEYPrivateKey *)key); + + /* Determine the hash algorithm to use, based on hashAlgTag and + * pssParams.hashAlg; there are four cases */ + if (hashAlgTag != SEC_OID_UNKNOWN) { + if (pssParams.hashAlg) { + if (SECOID_GetAlgorithmTag(pssParams.hashAlg) != hashAlgTag) { + PORT_SetError(SEC_ERROR_INVALID_ARGS); + return NULL; + } + } + } else if (hashAlgTag == SEC_OID_UNKNOWN) { + if (pssParams.hashAlg) { + hashAlgTag = SECOID_GetAlgorithmTag(pssParams.hashAlg); + } else { + /* Find a suitable hash algorithm based on the NIST recommendation */ + if (modBytes <= 384) { /* 128, in NIST 800-57, Part 1 */ + hashAlgTag = SEC_OID_SHA256; + } else if (modBytes <= 960) { /* 192, NIST 800-57, Part 1 */ + hashAlgTag = SEC_OID_SHA384; + } else { + hashAlgTag = SEC_OID_SHA512; + } + } + } + + if (hashAlgTag != SEC_OID_SHA1 && hashAlgTag != SEC_OID_SHA224 && + hashAlgTag != SEC_OID_SHA256 && hashAlgTag != SEC_OID_SHA384 && + hashAlgTag != SEC_OID_SHA512) { + PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); + return NULL; + } + + /* Now that the hash algorithm is decided, check if it matches the + * existing parameters if any */ + if (pssParams.maskAlg) { + SECAlgorithmID maskHashAlg; + + if (SECOID_GetAlgorithmTag(pssParams.maskAlg) != SEC_OID_PKCS1_MGF1) { + PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); + return NULL; + } + + if (pssParams.maskAlg->parameters.data == NULL) { + PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); + return NULL; + } + + PORT_Memset(&maskHashAlg, 0, sizeof(maskHashAlg)); + rv = SEC_QuickDERDecodeItem(arena, &maskHashAlg, + SEC_ASN1_GET(SECOID_AlgorithmIDTemplate), + &pssParams.maskAlg->parameters); + if (rv != SECSuccess) { + return NULL; + } + + /* Following the recommendation in RFC 4055, assume the hash + * algorithm identical to pssParam.hashAlg */ + if (SECOID_GetAlgorithmTag(&maskHashAlg) != hashAlgTag) { + PORT_SetError(SEC_ERROR_INVALID_ALGORITHM); + return NULL; + } + } + + hashLength = HASH_ResultLenByOidTag(hashAlgTag); + + if (pssParams.saltLength.data) { + rv = SEC_ASN1DecodeInteger((SECItem *)&pssParams.saltLength, + &saltLength); + if (rv != SECSuccess) { + return NULL; + } + + /* The specified salt length is too long */ + if (saltLength > modBytes - hashLength - 2) { + PORT_SetError(SEC_ERROR_INVALID_ARGS); + return NULL; + } + } + + /* Fill in the parameters */ + if (pssParams.hashAlg) { + if (hashAlgTag == SEC_OID_SHA1) { + /* Omit hashAlg if the the algorithm is SHA-1 (default) */ + pssParams.hashAlg = NULL; + } + } else { + if (hashAlgTag != SEC_OID_SHA1) { + pssParams.hashAlg = PORT_ArenaZAlloc(arena, sizeof(SECAlgorithmID)); + if (!pssParams.hashAlg) { + return NULL; + } + rv = SECOID_SetAlgorithmID(arena, pssParams.hashAlg, hashAlgTag, + NULL); + if (rv != SECSuccess) { + return NULL; + } + } + } + + if (pssParams.maskAlg) { + if (hashAlgTag == SEC_OID_SHA1) { + /* Omit maskAlg if the the algorithm is SHA-1 (default) */ + pssParams.maskAlg = NULL; + } + } else { + if (hashAlgTag != SEC_OID_SHA1) { + SECItem *hashAlgItem; + + PORT_Assert(pssParams.hashAlg != NULL); + + hashAlgItem = SEC_ASN1EncodeItem(arena, NULL, pssParams.hashAlg, + SEC_ASN1_GET(SECOID_AlgorithmIDTemplate)); + if (!hashAlgItem) { + return NULL; + } + pssParams.maskAlg = PORT_ArenaZAlloc(arena, sizeof(SECAlgorithmID)); + if (!pssParams.maskAlg) { + return NULL; + } + rv = SECOID_SetAlgorithmID(arena, pssParams.maskAlg, + SEC_OID_PKCS1_MGF1, hashAlgItem); + if (rv != SECSuccess) { + return NULL; + } + } + } + + if (pssParams.saltLength.data) { + if (saltLength == 20) { + /* Omit the salt length if it is the default */ + pssParams.saltLength.data = NULL; + } + } else { + /* Find a suitable length from the hash algorithm and modulus bits */ + saltLength = PR_MIN(hashLength, modBytes - hashLength - 2); + + if (saltLength != 20 && + !SEC_ASN1EncodeInteger(arena, &pssParams.saltLength, saltLength)) { + return NULL; + } + } + + if (pssParams.trailerField.data) { + /* Omit trailerField if the value is 1 (default) */ + pssParams.trailerField.data = NULL; + } + + return SEC_ASN1EncodeItem(arena, result, + &pssParams, SECKEY_RSAPSSParamsTemplate); +} + +SECItem * +SEC_CreateSignatureAlgorithmParameters(PLArenaPool *arena, + SECItem *result, + SECOidTag signAlgTag, + SECOidTag hashAlgTag, + const SECItem *params, + const SECKEYPrivateKey *key) +{ + switch (signAlgTag) { + case SEC_OID_PKCS1_RSA_PSS_SIGNATURE: + return sec_CreateRSAPSSParameters(arena, result, + hashAlgTag, params, key); + + default: + if (params == NULL) + return NULL; + if (result == NULL) + result = SECITEM_AllocItem(arena, NULL, 0); + if (SECITEM_CopyItem(arena, result, params) != SECSuccess) + return NULL; + return result; + } +} diff --git a/security/nss/lib/cryptohi/secvfy.c b/security/nss/lib/cryptohi/secvfy.c index 2ac21abd4dbb..83c9c579daa2 100644 --- a/security/nss/lib/cryptohi/secvfy.c +++ b/security/nss/lib/cryptohi/secvfy.c @@ -136,6 +136,8 @@ struct VFYContextStr { unsigned char dsasig[DSA_MAX_SIGNATURE_LEN]; /* the full ECDSA signature */ unsigned char ecdsasig[2 * MAX_ECKEY_LEN]; + /* the full RSA signature, only used in RSA-PSS */ + unsigned char rsasig[(RSA_MAX_MODULUS_BITS + 7) / 8]; } u; unsigned int pkcs1RSADigestInfoLen; /* the encoded DigestInfo from a RSA PKCS#1 signature */ @@ -148,6 +150,7 @@ struct VFYContextStr { * VFY_CreateContext call. If false, the * signature must be provided with a * VFY_EndWithSignature call. */ + SECItem *params; }; static SECStatus @@ -250,9 +253,38 @@ sec_DecodeSigAlg(const SECKEYPublicKey *key, SECOidTag sigAlg, *hashalg = SEC_OID_SHA1; break; case SEC_OID_PKCS1_RSA_ENCRYPTION: - case SEC_OID_PKCS1_RSA_PSS_SIGNATURE: *hashalg = SEC_OID_UNKNOWN; /* get it from the RSA signature */ break; + case SEC_OID_PKCS1_RSA_PSS_SIGNATURE: + if (param && param->data) { + SECKEYRSAPSSParams pssParam; + arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); + if (arena == NULL) { + return SECFailure; + } + PORT_Memset(&pssParam, 0, sizeof pssParam); + rv = SEC_QuickDERDecodeItem(arena, &pssParam, + SECKEY_RSAPSSParamsTemplate, + param); + if (rv != SECSuccess) { + PORT_FreeArena(arena, PR_FALSE); + return rv; + } + if (pssParam.hashAlg) { + *hashalg = SECOID_GetAlgorithmTag(pssParam.hashAlg); + } else { + *hashalg = SEC_OID_SHA1; /* default, SHA-1 */ + } + PORT_FreeArena(arena, PR_FALSE); + /* only accept hash algorithms */ + if (HASH_GetHashTypeByOidTag(*hashalg) == HASH_AlgNULL) { + /* error set by HASH_GetHashTypeByOidTag */ + return SECFailure; + } + } else { + *hashalg = SEC_OID_SHA1; /* default, SHA-1 */ + } + break; case SEC_OID_ANSIX962_ECDSA_SHA224_SIGNATURE: case SEC_OID_PKCS1_SHA224_WITH_RSA_ENCRYPTION: @@ -434,6 +466,20 @@ vfy_CreateContext(const SECKEYPublicKey *key, const SECItem *sig, cx->key, sig, wincx); break; + case rsaPssKey: + sigLen = SECKEY_SignatureLen(key); + if (sigLen == 0) { + /* error set by SECKEY_SignatureLen */ + rv = SECFailure; + break; + } + if (sig->len != sigLen) { + PORT_SetError(SEC_ERROR_BAD_SIGNATURE); + rv = SECFailure; + break; + } + PORT_Memcpy(cx->u.buffer, sig->data, sigLen); + break; case dsaKey: case ecKey: sigLen = SECKEY_SignatureLen(key); @@ -496,6 +542,7 @@ VFYContext * VFY_CreateContextWithAlgorithmID(const SECKEYPublicKey *key, const SECItem *sig, const SECAlgorithmID *sigAlgorithm, SECOidTag *hash, void *wincx) { + VFYContext *cx; SECOidTag encAlg, hashAlg; SECStatus rv = sec_DecodeSigAlg(key, SECOID_GetAlgorithmTag((SECAlgorithmID *)sigAlgorithm), @@ -503,7 +550,13 @@ VFY_CreateContextWithAlgorithmID(const SECKEYPublicKey *key, const SECItem *sig, if (rv != SECSuccess) { return NULL; } - return vfy_CreateContext(key, sig, encAlg, hashAlg, hash, wincx); + + cx = vfy_CreateContext(key, sig, encAlg, hashAlg, hash, wincx); + if (sigAlgorithm->parameters.data) { + cx->params = SECITEM_DupItem(&sigAlgorithm->parameters); + } + + return cx; } void @@ -520,6 +573,9 @@ VFY_DestroyContext(VFYContext *cx, PRBool freeit) if (cx->pkcs1RSADigestInfo) { PORT_Free(cx->pkcs1RSADigestInfo); } + if (cx->params) { + SECITEM_FreeItem(cx->params, PR_TRUE); + } if (freeit) { PORT_ZFree(cx, sizeof(VFYContext)); } @@ -562,7 +618,7 @@ VFY_EndWithSignature(VFYContext *cx, SECItem *sig) { unsigned char final[HASH_LENGTH_MAX]; unsigned part; - SECItem hash, dsasig; /* dsasig is also used for ECDSA */ + SECItem hash, rsasig, dsasig; /* dsasig is also used for ECDSA */ SECStatus rv; if ((cx->hasSignature == PR_FALSE) && (sig == NULL)) { @@ -598,25 +654,70 @@ VFY_EndWithSignature(VFYContext *cx, SECItem *sig) return SECFailure; } break; - case rsaKey: { - SECItem digest; - digest.data = final; - digest.len = part; - if (sig) { - SECOidTag hashid; - PORT_Assert(cx->hashAlg != SEC_OID_UNKNOWN); - rv = recoverPKCS1DigestInfo(cx->hashAlg, &hashid, - &cx->pkcs1RSADigestInfo, - &cx->pkcs1RSADigestInfoLen, - cx->key, - sig, cx->wincx); - PORT_Assert(cx->hashAlg == hashid); + case rsaKey: + if (cx->encAlg == SEC_OID_PKCS1_RSA_PSS_SIGNATURE) { + CK_RSA_PKCS_PSS_PARAMS mech; + SECItem mechItem = { siBuffer, (unsigned char *)&mech, sizeof(mech) }; + SECKEYRSAPSSParams params; + PLArenaPool *arena; + + arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); + if (arena == NULL) { + return SECFailure; + } + + PORT_Memset(¶ms, 0, sizeof(params)); + rv = SEC_QuickDERDecodeItem(arena, ¶ms, + SECKEY_RSAPSSParamsTemplate, + cx->params); + if (rv != SECSuccess) { + PORT_FreeArena(arena, PR_FALSE); + return SECFailure; + } + rv = sec_RSAPSSParamsToMechanism(&mech, ¶ms); + PORT_FreeArena(arena, PR_FALSE); if (rv != SECSuccess) { return SECFailure; } + rsasig.data = cx->u.buffer; + rsasig.len = SECKEY_SignatureLen(cx->key); + if (rsasig.len == 0) { + return SECFailure; + } + if (sig) { + if (sig->len != rsasig.len) { + PORT_SetError(SEC_ERROR_BAD_SIGNATURE); + return SECFailure; + } + PORT_Memcpy(rsasig.data, sig->data, rsasig.len); + } + hash.data = final; + hash.len = part; + if (PK11_VerifyWithMechanism(cx->key, CKM_RSA_PKCS_PSS, &mechItem, + &rsasig, &hash, cx->wincx) != SECSuccess) { + PORT_SetError(SEC_ERROR_BAD_SIGNATURE); + return SECFailure; + } + } else { + SECItem digest; + digest.data = final; + digest.len = part; + if (sig) { + SECOidTag hashid; + PORT_Assert(cx->hashAlg != SEC_OID_UNKNOWN); + rv = recoverPKCS1DigestInfo(cx->hashAlg, &hashid, + &cx->pkcs1RSADigestInfo, + &cx->pkcs1RSADigestInfoLen, + cx->key, + sig, cx->wincx); + PORT_Assert(cx->hashAlg == hashid); + if (rv != SECSuccess) { + return SECFailure; + } + } + return verifyPKCS1DigestInfo(cx, &digest); } - return verifyPKCS1DigestInfo(cx, &digest); - } + break; default: PORT_SetError(SEC_ERROR_BAD_SIGNATURE); return SECFailure; /* shouldn't happen */ @@ -722,7 +823,7 @@ VFY_VerifyDigestWithAlgorithmID(const SECItem *digest, static SECStatus vfy_VerifyData(const unsigned char *buf, int len, const SECKEYPublicKey *key, const SECItem *sig, SECOidTag encAlg, SECOidTag hashAlg, - SECOidTag *hash, void *wincx) + const SECItem *params, SECOidTag *hash, void *wincx) { SECStatus rv; VFYContext *cx; @@ -730,6 +831,9 @@ vfy_VerifyData(const unsigned char *buf, int len, const SECKEYPublicKey *key, cx = vfy_CreateContext(key, sig, encAlg, hashAlg, hash, wincx); if (cx == NULL) return SECFailure; + if (params) { + cx->params = SECITEM_DupItem(params); + } rv = VFY_Begin(cx); if (rv == SECSuccess) { @@ -748,7 +852,7 @@ VFY_VerifyDataDirect(const unsigned char *buf, int len, SECOidTag encAlg, SECOidTag hashAlg, SECOidTag *hash, void *wincx) { - return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, hash, wincx); + return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, NULL, hash, wincx); } SECStatus @@ -760,7 +864,7 @@ VFY_VerifyData(const unsigned char *buf, int len, const SECKEYPublicKey *key, if (rv != SECSuccess) { return rv; } - return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, NULL, wincx); + return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, NULL, NULL, wincx); } SECStatus @@ -777,5 +881,6 @@ VFY_VerifyDataWithAlgorithmID(const unsigned char *buf, int len, if (rv != SECSuccess) { return rv; } - return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, hash, wincx); + return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, + &sigAlgorithm->parameters, hash, wincx); } diff --git a/security/nss/lib/freebl/rsa.c b/security/nss/lib/freebl/rsa.c index 7354d931793a..204c8ff02359 100644 --- a/security/nss/lib/freebl/rsa.c +++ b/security/nss/lib/freebl/rsa.c @@ -318,6 +318,13 @@ RSA_NewKey(int keySizeInBits, SECItem *publicExponent) key->version.data[0] = 0; /* 3. Set the public exponent */ SECITEM_TO_MPINT(*publicExponent, &e); +#ifndef NSS_FIPS_DISABLED + /* check the exponent size we */ + if (mp_cmp_d(&e, 0x10001) < 0) { + PORT_SetError(SEC_ERROR_INVALID_ARGS); + goto cleanup; + } +#endif kiter = 0; max_attempts = 5 * (keySizeInBits / 2); /* FIPS 186-4 B.3.3 steps 4.7 and 5.8 */ do { diff --git a/security/nss/lib/nss/nss.def b/security/nss/lib/nss/nss.def index b61ce023ae4b..4f0ade4d0bed 100644 --- a/security/nss/lib/nss/nss.def +++ b/security/nss/lib/nss/nss.def @@ -1123,3 +1123,13 @@ CERT_FindCertByNicknameOrEmailAddrForUsageCX; ;+ local: ;+ *; ;+}; +;+NSS_3.34 { # NSS 3.34 release +;+ global: +PK11_CreateManagedGenericObject; +SGN_NewContextWithAlgorithmID; +SEC_SignDataWithAlgorithmID; +SEC_DerSignDataWithAlgorithmID; +SEC_CreateSignatureAlgorithmParameters; +;+ local: +;+ *; +;+}; diff --git a/security/nss/lib/pk11wrap/pk11merge.c b/security/nss/lib/pk11wrap/pk11merge.c index 8c4c5129aa6a..d14f44c78059 100644 --- a/security/nss/lib/pk11wrap/pk11merge.c +++ b/security/nss/lib/pk11wrap/pk11merge.c @@ -1258,6 +1258,7 @@ pk11_newMergeLogNode(PLArenaPool *arena, /* initialize it */ obj->slot = slot; obj->objectID = id; + obj->owner = PR_FALSE; newLog->object = obj; newLog->error = error; diff --git a/security/nss/lib/pk11wrap/pk11obj.c b/security/nss/lib/pk11wrap/pk11obj.c index 9e9b611e51a1..b97caddd44e8 100644 --- a/security/nss/lib/pk11wrap/pk11obj.c +++ b/security/nss/lib/pk11wrap/pk11obj.c @@ -1505,6 +1505,7 @@ PK11_FindGenericObjects(PK11SlotInfo *slot, CK_OBJECT_CLASS objClass) /* initialize it */ obj->slot = PK11_ReferenceSlot(slot); obj->objectID = objectIDs[i]; + obj->owner = PR_FALSE; obj->next = NULL; obj->prev = NULL; @@ -1585,6 +1586,9 @@ PK11_DestroyGenericObject(PK11GenericObject *object) PK11_UnlinkGenericObject(object); if (object->slot) { + if (object->owner) { + PK11_DestroyObject(object->slot, object->objectID); + } PK11_FreeSlot(object->slot); } PORT_Free(object); @@ -1626,8 +1630,9 @@ PK11_DestroyGenericObjects(PK11GenericObject *objects) * Hand Create a new object and return the Generic object for our new object. */ PK11GenericObject * -PK11_CreateGenericObject(PK11SlotInfo *slot, const CK_ATTRIBUTE *pTemplate, - int count, PRBool token) +pk11_CreateGenericObjectHelper(PK11SlotInfo *slot, + const CK_ATTRIBUTE *pTemplate, + int count, PRBool token, PRBool owner) { CK_OBJECT_HANDLE objectID; PK11GenericObject *obj; @@ -1651,11 +1656,40 @@ PK11_CreateGenericObject(PK11SlotInfo *slot, const CK_ATTRIBUTE *pTemplate, /* initialize it */ obj->slot = PK11_ReferenceSlot(slot); obj->objectID = objectID; + obj->owner = owner; obj->next = NULL; obj->prev = NULL; return obj; } +/* This is the classic interface. Applications would call this function to + * create new object that would not be destroyed later. This lead to resource + * leaks (and thus memory leaks in the PKCS #11 module). To solve this we have + * a new interface that automatically marks objects created on the fly to be + * destroyed later. + * The old interface is preserved because applications like Mozilla purposefully + * leak the reference to be found later with PK11_FindGenericObjects. New + * applications should use the new interface PK11_CreateManagedGenericObject */ +PK11GenericObject * +PK11_CreateGenericObject(PK11SlotInfo *slot, const CK_ATTRIBUTE *pTemplate, + int count, PRBool token) +{ + return pk11_CreateGenericObjectHelper(slot, pTemplate, count, token, + PR_FALSE); +} + +/* Use this interface. It will automatically destroy any temporary objects + * (token = PR_FALSE) when the PK11GenericObject is freed. Permanent objects still + * need to be destroyed by hand with PK11_DestroyTokenObject. + */ +PK11GenericObject * +PK11_CreateManagedGenericObject(PK11SlotInfo *slot, + const CK_ATTRIBUTE *pTemplate, int count, PRBool token) +{ + return pk11_CreateGenericObjectHelper(slot, pTemplate, count, token, + !token); +} + /* * Change an attribute on a raw object */ diff --git a/security/nss/lib/pk11wrap/pk11pub.h b/security/nss/lib/pk11wrap/pk11pub.h index edfe82f5ae2e..dbd8da092394 100644 --- a/security/nss/lib/pk11wrap/pk11pub.h +++ b/security/nss/lib/pk11wrap/pk11pub.h @@ -831,6 +831,10 @@ SECStatus PK11_LinkGenericObject(PK11GenericObject *list, PK11GenericObject *object); SECStatus PK11_DestroyGenericObjects(PK11GenericObject *object); SECStatus PK11_DestroyGenericObject(PK11GenericObject *object); +PK11GenericObject *PK11_CreateManagedGenericObject(PK11SlotInfo *slot, + const CK_ATTRIBUTE *pTemplate, + int count, PRBool token); +/* deprecated */ PK11GenericObject *PK11_CreateGenericObject(PK11SlotInfo *slot, const CK_ATTRIBUTE *pTemplate, int count, PRBool token); diff --git a/security/nss/lib/pk11wrap/secmodti.h b/security/nss/lib/pk11wrap/secmodti.h index 63c207929755..260e6387d70f 100644 --- a/security/nss/lib/pk11wrap/secmodti.h +++ b/security/nss/lib/pk11wrap/secmodti.h @@ -175,6 +175,7 @@ struct PK11GenericObjectStr { PK11GenericObject *next; PK11SlotInfo *slot; CK_OBJECT_HANDLE objectID; + PRBool owner; }; #define MAX_TEMPL_ATTRS 16 /* maximum attributes in template */ diff --git a/security/nss/lib/pkcs7/p7create.c b/security/nss/lib/pkcs7/p7create.c index 96ada5c0f5f6..d8f4369542d2 100644 --- a/security/nss/lib/pkcs7/p7create.c +++ b/security/nss/lib/pkcs7/p7create.c @@ -18,7 +18,7 @@ #include "secder.h" #include "secpkcs5.h" -const int NSS_PBE_DEFAULT_ITERATION_COUNT = 2000; /* used in p12e.c too */ +const int NSS_PBE_DEFAULT_ITERATION_COUNT = 100000; /* used in p12e.c too */ static SECStatus sec_pkcs7_init_content_info(SEC_PKCS7ContentInfo *cinfo, PLArenaPool *poolp, diff --git a/security/nss/nss.gyp b/security/nss/nss.gyp index 76302d77656a..9e9b49f7ff5c 100644 --- a/security/nss/nss.gyp +++ b/security/nss/nss.gyp @@ -148,6 +148,7 @@ 'cmd/pk1sign/pk1sign.gyp:pk1sign', 'cmd/pp/pp.gyp:pp', 'cmd/rsaperf/rsaperf.gyp:rsaperf', + 'cmd/rsapoptst/rsapoptst.gyp:rsapoptst', 'cmd/sdrtest/sdrtest.gyp:sdrtest', 'cmd/selfserv/selfserv.gyp:selfserv', 'cmd/shlibsign/mangle/mangle.gyp:mangle', @@ -163,6 +164,7 @@ 'cmd/vfychain/vfychain.gyp:vfychain', 'cmd/vfyserv/vfyserv.gyp:vfyserv', 'gtests/certhigh_gtest/certhigh_gtest.gyp:certhigh_gtest', + 'gtests/cryptohi_gtest/cryptohi_gtest.gyp:cryptohi_gtest', 'gtests/der_gtest/der_gtest.gyp:der_gtest', 'gtests/certdb_gtest/certdb_gtest.gyp:certdb_gtest', 'gtests/freebl_gtest/freebl_gtest.gyp:prng_gtest', diff --git a/security/nss/tests/all.sh b/security/nss/tests/all.sh index 3141571e8039..7c9448a461c1 100755 --- a/security/nss/tests/all.sh +++ b/security/nss/tests/all.sh @@ -130,14 +130,20 @@ run_tests() } ########################## run_cycle_standard ########################## -# run test suites with defaults settings (no PKIX, no sharedb) +# run test suites with dbm database (no PKIX, no sharedb) ######################################################################## run_cycle_standard() { TEST_MODE=STANDARD TESTS="${ALL_TESTS}" - TESTS_SKIP= + TESTS_SKIP="cipher libpkix sdr ocsp pkits" + + NSS_DEFAULT_DB_TYPE="dbm" + export NSS_DEFAULT_DB_TYPE + + NSS_SSL_TESTS=`echo "${NSS_SSL_TESTS}" | sed -e "s/normal//g" -e "s/fips//g" -e "s/_//g"` + NSS_SSL_RUN=`echo "${NSS_SSL_RUN}" | sed -e "s/cov//g" -e "s/auth//g"` run_tests } @@ -162,7 +168,12 @@ run_cycle_pkix() TESTS="${ALL_TESTS}" TESTS_SKIP="cipher dbtests sdr crmf smime merge multinit" + NSS_SSL_TESTS=`echo "${NSS_SSL_TESTS}" | sed -e "s/normal//g" -e "s/fips//g" -e "s/_//g"` + export -n NSS_SSL_RUN + + # use the default format + export -n NSS_DEFAULT_DB_TYPE run_tests } @@ -231,10 +242,10 @@ run_cycle_shared_db() # run the tests for native sharedb support TESTS="${ALL_TESTS}" - TESTS_SKIP="cipher libpkix dbupgrade sdr ocsp pkits" + TESTS_SKIP="dbupgrade" - NSS_SSL_TESTS=`echo "${NSS_SSL_TESTS}" | sed -e "s/normal//g" -e "s/fips//g" -e "s/_//g"` - NSS_SSL_RUN=`echo "${NSS_SSL_RUN}" | sed -e "s/cov//g" -e "s/auth//g"` + export -n NSS_SSL_TESTS + export -n NSS_SSL_RUN run_tests } diff --git a/security/nss/tests/cert/cert.sh b/security/nss/tests/cert/cert.sh index 1e7c091e579c..9fb29c645880 100755 --- a/security/nss/tests/cert/cert.sh +++ b/security/nss/tests/cert/cert.sh @@ -510,7 +510,11 @@ cert_all_CA() # dsaroot.cert in $CLIENT_CADIR and in $SERVER_CADIR is one of the last # in the chain - +# +# Create RSA-PSS version of TestCA + ALL_CU_SUBJECT="CN=NSS Test CA (RSA-PSS), O=BOGUS NSS, L=Mountain View, ST=California, C=US" + cert_rsa_pss_CA $CADIR TestCA-rsa-pss -x "CTu,CTu,CTu" ${D_CA} "1" SHA256 + rm $CLIENT_CADIR/rsapssroot.cert $SERVER_CADIR/rsapssroot.cert # @@ -627,7 +631,7 @@ CERTSCRIPT ################################ cert_dsa_CA ############################# # local shell function to build the Temp. Certificate Authority (CA) # used for testing purposes, creating a CA Certificate and a root cert -# This is the ECC version of cert_CA. +# This is the DSA version of cert_CA. ########################################################################## cert_dsa_CA() { @@ -638,7 +642,7 @@ cert_dsa_CA() DOMAIN=$5 CERTSERIAL=$6 - echo "$SCRIPTNAME: Creating an DSA CA Certificate $NICKNAME ==========================" + echo "$SCRIPTNAME: Creating a DSA CA Certificate $NICKNAME ==========================" if [ ! -d "${CUR_CADIR}" ]; then mkdir -p "${CUR_CADIR}" @@ -651,7 +655,7 @@ cert_dsa_CA() LPROFILE="multiaccess:${DOMAIN}" fi - ################# Creating an DSA CA Cert ############################### + ################# Creating a DSA CA Cert ############################### # CU_ACTION="Creating DSA CA Cert $NICKNAME " CU_SUBJECT=$ALL_CU_SUBJECT @@ -690,6 +694,79 @@ CERTSCRIPT + +################################ cert_rsa_pss_CA ############################# +# local shell function to build the Temp. Certificate Authority (CA) +# used for testing purposes, creating a CA Certificate and a root cert +# This is the RSA-PSS version of cert_CA. +########################################################################## +cert_rsa_pss_CA() +{ + CUR_CADIR=$1 + NICKNAME=$2 + SIGNER=$3 + TRUSTARG=$4 + DOMAIN=$5 + CERTSERIAL=$6 + HASHALG=$7 + + echo "$SCRIPTNAME: Creating an RSA-PSS CA Certificate $NICKNAME ==========================" + + if [ ! -d "${CUR_CADIR}" ]; then + mkdir -p "${CUR_CADIR}" + fi + cd ${CUR_CADIR} + pwd + + LPROFILE=. + if [ -n "${MULTIACCESS_DBM}" ]; then + LPROFILE="multiaccess:${DOMAIN}" + fi + + HASHOPT= + if [ -n "$HASHALG" ]; then + HASHOPT="-Z $HASHALG" + fi + + ################# Creating an RSA-PSS CA Cert ############################### + # + CU_ACTION="Creating RSA-PSS CA Cert $NICKNAME " + CU_SUBJECT=$ALL_CU_SUBJECT + certu -S -n $NICKNAME -k rsa --pss $HASHOPT -t $TRUSTARG -v 600 $SIGNER \ + -d ${LPROFILE} -1 -2 -5 -f ${R_PWFILE} -z ${R_NOISE_FILE} \ + -m $CERTSERIAL 2>&1 <&1 + CU_ACTION="Attempt to generate a key with exponent of 3 (too small)" + certu -G -k rsa -g 2048 -y 3 -d "${PROFILEDIR}" -z ${R_NOISE_FILE} -f "${R_FIPSPWFILE}" + CU_ACTION="Attempt to generate a key with exponent of 17 (too small)" + certu -G -k rsa -g 2048 -y 17 -d "${PROFILEDIR}" -z ${R_NOISE_FILE} -f "${R_FIPSPWFILE}" RETEXPECTED=0 CU_ACTION="Generate Certificate for ${CERTNAME}" @@ -1268,6 +1349,20 @@ MODSCRIPT if [ "$RET" -eq 0 ]; then cert_log "SUCCESS: FIPS passed" fi + +} + +########################## cert_rsa_exponent ################################# +# local shell function to verify small rsa exponent can be used (only +# run if FIPS has not been turned on in the build). +############################################################################## +cert_rsa_exponent() +{ + echo "$SCRIPTNAME: Verify that small RSA exponents still work ==============" + CU_ACTION="Attempt to generate a key with exponent of 3" + certu -G -k rsa -g 2048 -y 3 -d "${CLIENTDIR}" -z ${R_NOISE_FILE} -f "${R_PWFILE}" + CU_ACTION="Attempt to generate a key with exponent of 17" + certu -G -k rsa -g 2048 -y 17 -d "${CLIENTDIR}" -z ${R_NOISE_FILE} -f "${R_PWFILE}" } ############################## cert_eccurves ########################### @@ -1955,6 +2050,263 @@ cert_test_implicit_db_init() certu -A -n ca -t 'C,C,C' -d ${P_R_IMPLICIT_INIT_DIR} -i "${SERVER_CADIR}/serverCA.ca.cert" } +check_sign_algo() +{ + certu -L -n "$CERTNAME" -d "${PROFILEDIR}" -f "${R_PWFILE}" | \ + sed -n '/^ *Data:/,/^$/{ +/^ Signature Algorithm/,/^ *Salt Length/s/^ //p +}' > ${TMP}/signalgo.txt + + diff ${TMP}/signalgo.exp ${TMP}/signalgo.txt + RET=$? + if [ "$RET" -ne 0 ]; then + CERTFAILED=$RET + html_failed "${CU_ACTION} ($RET) " + cert_log "ERROR: ${CU_ACTION} failed $RET" + else + html_passed "${CU_ACTION}" + fi +} + +cert_test_rsapss() +{ + TEMPFILES="$TEMPFILES ${TMP}/signalgo.exp ${TMP}/signalgo.txt" + + cert_init_cert "${RSAPSSDIR}" "RSA-PSS Test Cert" 1000 "${D_RSAPSS}" + + CU_ACTION="Initialize Cert DB" + certu -N -d "${PROFILEDIR}" -f "${R_PWFILE}" 2>&1 + + CU_ACTION="Import RSA CA Cert" + certu -A -n "TestCA" -t "C,," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${R_CADIR}/TestCA.ca.cert" 2>&1 + + CU_ACTION="Import RSA-PSS CA Cert" + certu -A -n "TestCA-rsa-pss" -t "C,," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${R_CADIR}/TestCA-rsa-pss.ca.cert" 2>&1 + + CU_ACTION="Verify RSA-PSS CA Cert" + certu -V -u L -e -n "TestCA-rsa-pss" -d "${PROFILEDIR}" -f "${R_PWFILE}" + + # Subject certificate: RSA + # Issuer certificate: RSA + # Signature: RSA-PSS (explicit, with --pss-sign) + CERTNAME="TestUser-rsa-pss1" + + CU_ACTION="Generate Cert Request for $CERTNAME" + CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US" + certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" -o req 2>&1 + + CU_ACTION="Sign ${CERTNAME}'s Request" + certu -C -c "TestCA" --pss-sign -m 200 -v 60 -d "${P_R_CADIR}" \ + -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1 + + CU_ACTION="Import $CERTNAME's Cert" + certu -A -n "$CERTNAME" -t ",," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${CERTNAME}.cert" 2>&1 + + CU_ACTION="Verify $CERTNAME's Cert" + certu -V -u V -e -n "$CERTNAME" -d "${PROFILEDIR}" -f "${R_PWFILE}" + cat > ${TMP}/signalgo.exp <&1 + + CU_ACTION="Sign ${CERTNAME}'s Request" + certu -C -c "TestCA" --pss-sign -Z SHA512 -m 201 -v 60 -d "${P_R_CADIR}" \ + -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1 + + CU_ACTION="Import $CERTNAME's Cert" + certu -A -n "$CERTNAME" -t ",," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${CERTNAME}.cert" 2>&1 + + CU_ACTION="Verify $CERTNAME's Cert" + certu -V -u V -e -n "$CERTNAME" -d "${PROFILEDIR}" -f "${R_PWFILE}" + cat > ${TMP}/signalgo.exp <&1 + + CU_ACTION="Sign ${CERTNAME}'s Request" + certu -C -c "TestCA-rsa-pss" -m 202 -v 60 -d "${P_R_CADIR}" \ + -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1 + + CU_ACTION="Import $CERTNAME's Cert" + certu -A -n "$CERTNAME" -t ",," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${CERTNAME}.cert" 2>&1 + + CU_ACTION="Verify $CERTNAME's Cert" + certu -V -u V -e -n "$CERTNAME" -d "${PROFILEDIR}" -f "${R_PWFILE}" + cat > ${TMP}/signalgo.exp <&1 + + CU_ACTION="Sign ${CERTNAME}'s Request" + certu -C -c "TestCA" --pss-sign -m 203 -v 60 -d "${P_R_CADIR}" \ + -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1 + + CU_ACTION="Import $CERTNAME's Cert" + certu -A -n "$CERTNAME" -t ",," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${CERTNAME}.cert" 2>&1 + + CU_ACTION="Verify $CERTNAME's Cert" + certu -V -u V -e -n "$CERTNAME" -d "${PROFILEDIR}" -f "${R_PWFILE}" + cat > ${TMP}/signalgo.exp <&1 + + CU_ACTION="Sign ${CERTNAME}'s Request" + certu -C -c "TestCA-rsa-pss" --pss-sign -m 204 -v 60 -d "${P_R_CADIR}" \ + -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1 + + CU_ACTION="Import $CERTNAME's Cert" + certu -A -n "$CERTNAME" -t ",," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${CERTNAME}.cert" 2>&1 + + CU_ACTION="Verify $CERTNAME's Cert" + certu -V -u V -e -n "$CERTNAME" -d "${PROFILEDIR}" -f "${R_PWFILE}" + cat > ${TMP}/signalgo.exp <&1 + + CU_ACTION="Sign ${CERTNAME}'s Request" + certu -C -c "TestCA-rsa-pss" -m 205 -v 60 -d "${P_R_CADIR}" \ + -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1 + + CU_ACTION="Import $CERTNAME's Cert" + certu -A -n "$CERTNAME" -t ",," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${CERTNAME}.cert" 2>&1 + + CU_ACTION="Verify $CERTNAME's Cert" + certu -V -u V -e -n "$CERTNAME" -d "${PROFILEDIR}" -f "${R_PWFILE}" + cat > ${TMP}/signalgo.exp <&1 + + CU_ACTION="Sign ${CERTNAME}'s Request" + RETEXPECTED=255 + certu -C -c "TestCA-rsa-pss" --pss-sign -Z SHA512 -m 206 -v 60 -d "${P_R_CADIR}" \ + -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1 + RETEXPECTED=0 + + # Subject certificate: RSA-PSS + # Issuer certificate: RSA-PSS + # Signature: RSA-PSS (with compatible hash algorithm) + CERTNAME="TestUser-rsa-pss8" + + CU_ACTION="Generate Cert Request for $CERTNAME" + CU_SUBJECT="CN=$CERTNAME, E=${CERTNAME}@bogus.com, O=BOGUS NSS, L=Mountain View, ST=California, C=US" + certu -R -d "${PROFILEDIR}" -f "${R_PWFILE}" -z "${R_NOISE_FILE}" --pss -o req 2>&1 + + CU_ACTION="Sign ${CERTNAME}'s Request" + certu -C -c "TestCA-rsa-pss" --pss-sign -Z SHA256 -m 207 -v 60 -d "${P_R_CADIR}" \ + -i req -o "${CERTNAME}.cert" -f "${R_PWFILE}" "$1" 2>&1 + + CU_ACTION="Import $CERTNAME's Cert" + certu -A -n "$CERTNAME" -t ",," -d "${PROFILEDIR}" -f "${R_PWFILE}" \ + -i "${CERTNAME}.cert" 2>&1 + + CU_ACTION="Verify $CERTNAME's Cert" + certu -V -u V -e -n "$CERTNAME" -d "${PROFILEDIR}" -f "${R_PWFILE}" + cat > ${TMP}/signalgo.exp <
    " } -############################## ssl_cov ################################# +############################# setup_policy ############################# +# local shell function to create policy configuration +######################################################################## +setup_policy() +{ + policy="$1" + OUTFILE=${P_R_CLIENTDIR}/pkcs11.txt + cat > "$OUTFILE" << ++EOF++ +library= +name=NSS Internal PKCS #11 Module +parameters=configdir='./client' certPrefix='' keyPrefix='' secmod='secmod.db' flags= updatedir='' updateCertPrefix='' updateKeyPrefix='' updateid='' updateTokenDescription='' +NSS=Flags=internal,critical trustOrder=75 cipherOrder=100 slotParams=(1={slotFlags=[RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512] askpw=any timeout=30}) +++EOF++ + echo "config=${policy}" >> "$OUTFILE" + echo "" >> "$OUTFILE" + echo "library=${DIST}/${OBJDIR}/lib/libnssckbi.so" >> "$OUTFILE" + cat >> "$OUTFILE" << ++EOF++ +name=RootCerts +NSS=trustOrder=100 +++EOF++ + + echo "******************************Testing with: " + cat ${P_R_CLIENTDIR}/pkcs11.txt + echo "******************************" +} + +############################## ssl_policy ############################## # local shell function to perform SSL Policy tests ######################################################################## ssl_policy() @@ -688,7 +714,8 @@ ssl_policy() sparam="$CIPHER_SUITES" if [ ! -f "${P_R_CLIENTDIR}/pkcs11.txt" ] ; then - return; + html_failed "${SCRIPTNAME}: ${P_R_CLIENTDIR} is not initialized" + return 1; fi echo "Saving pkcs11.txt" @@ -696,9 +723,6 @@ ssl_policy() start_selfserv # Launch the server - VMIN="ssl3" - VMAX="tls1.2" - ignore_blank_lines ${SSLPOLICY} | \ while read value ectype testmax param policy testname do @@ -721,24 +745,7 @@ ssl_policy() # load the policy policy=`echo ${policy} | sed -e 's;_; ;g'` - - cat > ${P_R_CLIENTDIR}/pkcs11.txt << ++EOF++ -library= -name=NSS Internal PKCS #11 Module -parameters=configdir='./client' certPrefix='' keyPrefix='' secmod='secmod.db' flags= updatedir='' updateCertPrefix='' updateKeyPrefix='' updateid='' updateTokenDescription='' -NSS=Flags=internal,critical trustOrder=75 cipherOrder=100 slotParams=(1={slotFlags=[RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512] askpw=any timeout=30}) -++EOF++ - echo "config=${policy}" >> ${P_R_CLIENTDIR}/pkcs11.txt - echo "" >> ${P_R_CLIENTDIR}/pkcs11.txt - echo "library=${DIST}/${OBJDIR}/lib/libnssckbi.so" >> ${P_R_CLIENTDIR}/pkcs11.txt >> ${P_R_CLIENTDIR}/pkcs11.txt - cat >> ${P_R_CLIENTDIR}/pkcs11.txt << ++EOF++ -name=RootCerts -NSS=trustOrder=100 -++EOF++ - - echo "******************************Testing with: " - cat ${P_R_CLIENTDIR}/pkcs11.txt - echo "******************************" + setup_policy "$policy" echo "tstclnt -4 -p ${PORT} -h ${HOSTADDR} -c ${param} -V ${VMIN}:${VMAX} ${CLIENT_OPTIONS} \\" echo " -f -d ${P_R_CLIENTDIR} $verbose -w nss < ${REQUEST_FILE}" @@ -764,6 +771,54 @@ NSS=trustOrder=100 kill_selfserv html "
    " } + +list_enabled_suites() +{ + echo "SSL_DIR=${P_R_CLIENTDIR} ${BINDIR}/listsuites" + SSL_DIR="${P_R_CLIENTDIR}" ${BINDIR}/listsuites | tail -n+3 | \ + sed -n -e '/^TLS_/h' -e '/^ .*Enabled.*/{g;p}' | sed 's/:$//' +} + +############################## ssl_policy_listsuites ################### +# local shell function to perform SSL Policy tests, using listsuites +######################################################################## +ssl_policy_listsuites() +{ + #verbose="-v" + html_head "SSL POLICY LISTSUITES $NORM_EXT - server $SERVER_MODE/client $CLIENT_MODE" + + testname="" + sparam="$CIPHER_SUITES" + + if [ ! -f "${P_R_CLIENTDIR}/pkcs11.txt" ] ; then + html_failed "${SCRIPTNAME}: ${P_R_CLIENTDIR} is not initialized" + return 1; + fi + + echo "Saving pkcs11.txt" + cp ${P_R_CLIENTDIR}/pkcs11.txt ${P_R_CLIENTDIR}/pkcs11.txt.sav + + # Disallow all explicitly + setup_policy "disallow=all" + RET_EXP=1 + list_enabled_suites | grep '^TLS_' + RET=$? + html_msg $RET $RET_EXP "${testname}" \ + "produced a returncode of $RET, expected is $RET_EXP" + + # Disallow RSA in key exchange explicitly + setup_policy "disallow=rsa/ssl-key-exchange" + RET_EXP=1 + list_enabled_suites | grep '^TLS_RSA_' + RET=$? + html_msg $RET $RET_EXP "${testname}" \ + "produced a returncode of $RET, expected is $RET_EXP" + + cp ${P_R_CLIENTDIR}/pkcs11.txt.sav ${P_R_CLIENTDIR}/pkcs11.txt + + html "
    " +} + ############################# is_revoked ############################### # local shell function to check if certificate is revoked ######################################################################## @@ -1150,7 +1205,8 @@ ssl_run_tests() case "${SSL_TEST}" in "policy") if [ "${TEST_MODE}" = "SHARED_DB" ] ; then - ssl_policy + ssl_policy_listsuites + ssl_policy fi ;; "crl") diff --git a/security/nss/tests/ssl_gtests/ssl_gtests.sh b/security/nss/tests/ssl_gtests/ssl_gtests.sh index ac39f212ceb6..665b5a6297c5 100755 --- a/security/nss/tests/ssl_gtests/ssl_gtests.sh +++ b/security/nss/tests/ssl_gtests/ssl_gtests.sh @@ -41,6 +41,7 @@ certscript() { make_cert() { name=$1 type=$2 + unset type_args trust sign case $type in dsa) type_args='-g 1024' ;; rsa) type_args='-g 1024' ;; @@ -51,6 +52,9 @@ make_cert() { p521) type_args='-q secp521r1';type=ec ;; rsa_ca) type_args='-g 1024';trust='CT,CT,CT';ca=y;type=rsa ;; rsa_chain) type_args='-g 1024';sign='-c rsa_ca';type=rsa;; + rsapss_ca) type_args='-g 1024 --pss';trust='CT,CT,CT';ca=y;type=rsa ;; + rsapss_chain) type_args='-g 1024';sign='-c rsa_pss_ca';type=rsa;; + rsa_ca_rsapss_chain) type_args='-g 1024 --pss-sign';sign='-c rsa_ca';type=rsa;; ecdh_rsa) type_args='-q nistp256';sign='-c rsa_ca';type=ec ;; esac shift 2 @@ -87,6 +91,9 @@ ssl_gtest_certs() { make_cert ecdh_ecdsa p256 kex make_cert rsa_ca rsa_ca ca make_cert rsa_chain rsa_chain sign + make_cert rsa_pss_ca rsapss_ca ca + make_cert rsa_pss_chain rsapss_chain sign + make_cert rsa_ca_rsa_pss_chain rsa_ca_rsapss_chain sign make_cert ecdh_rsa ecdh_rsa kex make_cert dsa dsa sign } From 319a39de9f58efcb527bf58439a9bca72c010761 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 2 Nov 2017 12:18:07 +0100 Subject: [PATCH 02/33] Bug 1413598 - Pull in latest changes from u2f-hid-rs git repository r=jcj Reviewers: jcj Reviewed By: jcj Bug #: 1413598 Differential Revision: https://phabricator.services.mozilla.com/D181 --- dom/webauthn/u2f-hid-rs/.travis.yml | 4 ++++ dom/webauthn/u2f-hid-rs/src/windows/winapi.rs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dom/webauthn/u2f-hid-rs/.travis.yml b/dom/webauthn/u2f-hid-rs/.travis.yml index 970bb5577491..7a4a5ec19346 100644 --- a/dom/webauthn/u2f-hid-rs/.travis.yml +++ b/dom/webauthn/u2f-hid-rs/.travis.yml @@ -6,6 +6,10 @@ rust: - beta - nightly +matrix: + allow_failures: + - rust: nightly + addons: apt: packages: diff --git a/dom/webauthn/u2f-hid-rs/src/windows/winapi.rs b/dom/webauthn/u2f-hid-rs/src/windows/winapi.rs index 6c8b87424725..18c6898e86ee 100644 --- a/dom/webauthn/u2f-hid-rs/src/windows/winapi.rs +++ b/dom/webauthn/u2f-hid-rs/src/windows/winapi.rs @@ -195,7 +195,7 @@ impl DeviceInterfaceDetailData { return None; } - let mut data = unsafe { libc::malloc(size) as PSP_DEVICE_INTERFACE_DETAIL_DATA_W }; + let data = unsafe { libc::malloc(size) as PSP_DEVICE_INTERFACE_DETAIL_DATA_W }; if data.is_null() { return None; } From 1d2e8ed150c52b7b8be7f0d47a41e32a3132c75f Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 2 Nov 2017 12:18:19 +0100 Subject: [PATCH 03/33] Bug 1412408 - Fix content process leak of U2FTransactionChild instances r=jcj Summary: This patch fixes the reported leak of U2FTransactionChild instances in the content process by introducing a WebAuthnTransactionChildBase class that both WebAuthnTransactionChild and U2FTransactionChild inherit from. This base class is responsible for proper refcounting. In BackgroundChildImpl::DeallocPWebAuthnTransactionChild() we currently always cast to WebAuthnTransactionChild, that will work only for the WebAuthn API. We can now cast to WebAuthnTransactionChildBase to make this work for U2F as well. Reviewers: jcj Reviewed By: jcj Bug #: 1412408 Differential Revision: https://phabricator.services.mozilla.com/D179 --- dom/u2f/U2FTransactionChild.cpp | 8 ----- dom/u2f/U2FTransactionChild.h | 10 ++---- dom/webauthn/WebAuthnTransactionChild.cpp | 8 ----- dom/webauthn/WebAuthnTransactionChild.h | 10 ++---- dom/webauthn/WebAuthnTransactionChildBase.cpp | 21 +++++++++++ dom/webauthn/WebAuthnTransactionChildBase.h | 36 +++++++++++++++++++ dom/webauthn/moz.build | 2 ++ ipc/glue/BackgroundChildImpl.cpp | 8 ++--- 8 files changed, 67 insertions(+), 36 deletions(-) create mode 100644 dom/webauthn/WebAuthnTransactionChildBase.cpp create mode 100644 dom/webauthn/WebAuthnTransactionChildBase.h diff --git a/dom/u2f/U2FTransactionChild.cpp b/dom/u2f/U2FTransactionChild.cpp index 06d5c2256111..c6f44b8ec093 100644 --- a/dom/u2f/U2FTransactionChild.cpp +++ b/dom/u2f/U2FTransactionChild.cpp @@ -9,14 +9,6 @@ namespace mozilla { namespace dom { -U2FTransactionChild::U2FTransactionChild() -{ - // Retain a reference so the task object isn't deleted without IPDL's - // knowledge. The reference will be released by - // mozilla::ipc::BackgroundChildImpl::DeallocPWebAuthnTransactionChild. - NS_ADDREF_THIS(); -} - mozilla::ipc::IPCResult U2FTransactionChild::RecvConfirmRegister(const uint64_t& aTransactionId, nsTArray&& aRegBuffer) diff --git a/dom/u2f/U2FTransactionChild.h b/dom/u2f/U2FTransactionChild.h index 1176e7bc45fb..a76d6777718e 100644 --- a/dom/u2f/U2FTransactionChild.h +++ b/dom/u2f/U2FTransactionChild.h @@ -7,7 +7,7 @@ #ifndef mozilla_dom_U2FTransactionChild_h #define mozilla_dom_U2FTransactionChild_h -#include "mozilla/dom/PWebAuthnTransactionChild.h" +#include "mozilla/dom/WebAuthnTransactionChildBase.h" /* * Child process IPC implementation for U2F API. Receives results of U2F @@ -18,12 +18,9 @@ namespace mozilla { namespace dom { -class U2FTransactionChild final : public PWebAuthnTransactionChild +class U2FTransactionChild final : public WebAuthnTransactionChildBase { public: - NS_INLINE_DECL_REFCOUNTING(U2FTransactionChild); - U2FTransactionChild(); - mozilla::ipc::IPCResult RecvConfirmRegister(const uint64_t& aTransactionId, nsTArray&& aRegBuffer) override; @@ -37,9 +34,6 @@ public: RecvAbort(const uint64_t& aTransactionId, const nsresult& aError) override; void ActorDestroy(ActorDestroyReason why) override; - -private: - ~U2FTransactionChild() = default; }; } diff --git a/dom/webauthn/WebAuthnTransactionChild.cpp b/dom/webauthn/WebAuthnTransactionChild.cpp index 752d9a78bf82..67d4a8b157d7 100644 --- a/dom/webauthn/WebAuthnTransactionChild.cpp +++ b/dom/webauthn/WebAuthnTransactionChild.cpp @@ -9,14 +9,6 @@ namespace mozilla { namespace dom { -WebAuthnTransactionChild::WebAuthnTransactionChild() -{ - // Retain a reference so the task object isn't deleted without IPDL's - // knowledge. The reference will be released by - // mozilla::ipc::BackgroundChildImpl::DeallocPWebAuthnTransactionChild. - NS_ADDREF_THIS(); -} - mozilla::ipc::IPCResult WebAuthnTransactionChild::RecvConfirmRegister(const uint64_t& aTransactionId, nsTArray&& aRegBuffer) diff --git a/dom/webauthn/WebAuthnTransactionChild.h b/dom/webauthn/WebAuthnTransactionChild.h index 0765b4053b98..0b8e26af3f5d 100644 --- a/dom/webauthn/WebAuthnTransactionChild.h +++ b/dom/webauthn/WebAuthnTransactionChild.h @@ -7,7 +7,7 @@ #ifndef mozilla_dom_WebAuthnTransactionChild_h #define mozilla_dom_WebAuthnTransactionChild_h -#include "mozilla/dom/PWebAuthnTransactionChild.h" +#include "mozilla/dom/WebAuthnTransactionChildBase.h" /* * Child process IPC implementation for WebAuthn API. Receives results of @@ -19,12 +19,9 @@ namespace mozilla { namespace dom { -class WebAuthnTransactionChild final : public PWebAuthnTransactionChild +class WebAuthnTransactionChild final : public WebAuthnTransactionChildBase { public: - NS_INLINE_DECL_REFCOUNTING(WebAuthnTransactionChild); - WebAuthnTransactionChild(); - mozilla::ipc::IPCResult RecvConfirmRegister(const uint64_t& aTransactionId, nsTArray&& aRegBuffer) override; @@ -38,9 +35,6 @@ public: RecvAbort(const uint64_t& aTransactionId, const nsresult& aError) override; void ActorDestroy(ActorDestroyReason why) override; - -private: - ~WebAuthnTransactionChild() = default; }; } diff --git a/dom/webauthn/WebAuthnTransactionChildBase.cpp b/dom/webauthn/WebAuthnTransactionChildBase.cpp new file mode 100644 index 000000000000..9438f3384888 --- /dev/null +++ b/dom/webauthn/WebAuthnTransactionChildBase.cpp @@ -0,0 +1,21 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/dom/WebAuthnTransactionChildBase.h" + +namespace mozilla { +namespace dom { + +WebAuthnTransactionChildBase::WebAuthnTransactionChildBase() +{ + // Retain a reference so the task object isn't deleted without IPDL's + // knowledge. The reference will be released by + // mozilla::ipc::BackgroundChildImpl::DeallocPWebAuthnTransactionChild. + NS_ADDREF_THIS(); +} + +} +} diff --git a/dom/webauthn/WebAuthnTransactionChildBase.h b/dom/webauthn/WebAuthnTransactionChildBase.h new file mode 100644 index 000000000000..a3ec15fdabf4 --- /dev/null +++ b/dom/webauthn/WebAuthnTransactionChildBase.h @@ -0,0 +1,36 @@ + +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_WebAuthnTransactionChildBase_h +#define mozilla_dom_WebAuthnTransactionChildBase_h + +#include "mozilla/dom/PWebAuthnTransactionChild.h" + +/* + * A base class to be used by child process IPC implementations for WebAuthn + * and U2F. This mostly handles refcounting so we can properly dereference + * in mozilla::ipc::BackgroundChildImpl::DeallocPWebAuthnTransactionChild(), + * a function that doesn't know which of the two implementations is passed. + */ + +namespace mozilla { +namespace dom { + +class WebAuthnTransactionChildBase : public PWebAuthnTransactionChild +{ +public: + NS_INLINE_DECL_REFCOUNTING(WebAuthnTransactionChildBase); + WebAuthnTransactionChildBase(); + +protected: + ~WebAuthnTransactionChildBase() = default; +}; + +} +} + +#endif //mozilla_dom_WebAuthnTransactionChildBase_h diff --git a/dom/webauthn/moz.build b/dom/webauthn/moz.build index 1f5d7e0d79d5..ce98ed89eaf7 100644 --- a/dom/webauthn/moz.build +++ b/dom/webauthn/moz.build @@ -23,6 +23,7 @@ EXPORTS.mozilla.dom += [ 'WebAuthnCBORUtil.h', 'WebAuthnManager.h', 'WebAuthnTransactionChild.h', + 'WebAuthnTransactionChildBase.h', 'WebAuthnTransactionParent.h', 'WebAuthnUtil.h', ] @@ -40,6 +41,7 @@ UNIFIED_SOURCES += [ 'WebAuthnCBORUtil.cpp', 'WebAuthnManager.cpp', 'WebAuthnTransactionChild.cpp', + 'WebAuthnTransactionChildBase.cpp', 'WebAuthnTransactionParent.cpp', 'WebAuthnUtil.cpp', ] diff --git a/ipc/glue/BackgroundChildImpl.cpp b/ipc/glue/BackgroundChildImpl.cpp index 99e3ff845f15..a8a63fa90877 100644 --- a/ipc/glue/BackgroundChildImpl.cpp +++ b/ipc/glue/BackgroundChildImpl.cpp @@ -42,7 +42,7 @@ #include "mozilla/net/HttpBackgroundChannelChild.h" #include "mozilla/net/PUDPSocketChild.h" #include "mozilla/dom/network/UDPSocketChild.h" -#include "mozilla/dom/WebAuthnTransactionChild.h" +#include "mozilla/dom/WebAuthnTransactionChildBase.h" #include "nsID.h" #include "nsTraceRefcnt.h" @@ -86,7 +86,7 @@ using mozilla::dom::cache::PCacheStreamControlChild; using mozilla::dom::LocalStorage; using mozilla::dom::StorageDBChild; -using mozilla::dom::WebAuthnTransactionChild; +using mozilla::dom::WebAuthnTransactionChildBase; // ----------------------------------------------------------------------------- // BackgroundChildImpl::ThreadLocal @@ -607,8 +607,8 @@ bool BackgroundChildImpl::DeallocPWebAuthnTransactionChild(PWebAuthnTransactionChild* aActor) { MOZ_ASSERT(aActor); - RefPtr child = - dont_AddRef(static_cast(aActor)); + RefPtr child = + dont_AddRef(static_cast(aActor)); return true; } From a8442ff868031daf11b0c3157944ccb1f3ff0fb4 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Thu, 2 Nov 2017 11:34:22 +0000 Subject: [PATCH 04/33] Bug 1413635 - Generate AllocKind enum automatically and include more information in the definition macro r=sfink --- js/src/gc/AllocKind.h | 214 +++++++++++++++------------------------- js/src/gc/Allocator.cpp | 2 +- js/src/jsgc.cpp | 16 +-- js/src/jsgc.h | 2 +- 4 files changed, 88 insertions(+), 146 deletions(-) diff --git a/js/src/gc/AllocKind.h b/js/src/gc/AllocKind.h index 3ae666d31e8c..a4556df78621 100644 --- a/js/src/gc/AllocKind.h +++ b/js/src/gc/AllocKind.h @@ -22,92 +22,82 @@ namespace js { namespace gc { -/* The GC allocation kinds. */ -// FIXME: uint8_t would make more sense for the underlying type, but causes -// miscompilations in GCC (fixed in 4.8.5 and 4.9.3). See also bug 1143966. -enum class AllocKind { - FIRST, - OBJECT_FIRST = FIRST, - FUNCTION = FIRST, - FUNCTION_EXTENDED, - OBJECT0, - OBJECT0_BACKGROUND, - OBJECT2, - OBJECT2_BACKGROUND, - OBJECT4, - OBJECT4_BACKGROUND, - OBJECT8, - OBJECT8_BACKGROUND, - OBJECT12, - OBJECT12_BACKGROUND, - OBJECT16, - OBJECT16_BACKGROUND, - OBJECT_LIMIT, - OBJECT_LAST = OBJECT_LIMIT - 1, - SCRIPT, - LAZY_SCRIPT, - SHAPE, - ACCESSOR_SHAPE, - BASE_SHAPE, - OBJECT_GROUP, - FAT_INLINE_STRING, - STRING, - EXTERNAL_STRING, - FAT_INLINE_ATOM, - ATOM, - SYMBOL, - JITCODE, - SCOPE, - REGEXP_SHARED, - LIMIT, - LAST = LIMIT - 1 -}; +// The GC allocation kinds. +// +// These are defined by macros which enumerate the different allocation kinds +// and supply the following information: +// +// - the corresponding AllocKind +// - their JS::TraceKind +// - their C++ base type +// - a C++ type of the correct size +// - whether they can be finalized on the background thread +// - whether they can be allocated in the nursery -// Macro to enumerate the different allocation kinds supplying information about -// the trace kind, C++ type and allocation size. #define FOR_EACH_OBJECT_ALLOCKIND(D) \ - /* AllocKind TraceKind TypeName SizedType */ \ - D(FUNCTION, Object, JSObject, JSFunction) \ - D(FUNCTION_EXTENDED, Object, JSObject, FunctionExtended) \ - D(OBJECT0, Object, JSObject, JSObject_Slots0) \ - D(OBJECT0_BACKGROUND, Object, JSObject, JSObject_Slots0) \ - D(OBJECT2, Object, JSObject, JSObject_Slots2) \ - D(OBJECT2_BACKGROUND, Object, JSObject, JSObject_Slots2) \ - D(OBJECT4, Object, JSObject, JSObject_Slots4) \ - D(OBJECT4_BACKGROUND, Object, JSObject, JSObject_Slots4) \ - D(OBJECT8, Object, JSObject, JSObject_Slots8) \ - D(OBJECT8_BACKGROUND, Object, JSObject, JSObject_Slots8) \ - D(OBJECT12, Object, JSObject, JSObject_Slots12) \ - D(OBJECT12_BACKGROUND, Object, JSObject, JSObject_Slots12) \ - D(OBJECT16, Object, JSObject, JSObject_Slots16) \ - D(OBJECT16_BACKGROUND, Object, JSObject, JSObject_Slots16) + /* AllocKind TraceKind TypeName SizedType BGFinal Nursery */ \ + D(FUNCTION, Object, JSObject, JSFunction, true, true) \ + D(FUNCTION_EXTENDED, Object, JSObject, FunctionExtended, true, true) \ + D(OBJECT0, Object, JSObject, JSObject_Slots0, false, false) \ + D(OBJECT0_BACKGROUND, Object, JSObject, JSObject_Slots0, true, true) \ + D(OBJECT2, Object, JSObject, JSObject_Slots2, false, false) \ + D(OBJECT2_BACKGROUND, Object, JSObject, JSObject_Slots2, true, true) \ + D(OBJECT4, Object, JSObject, JSObject_Slots4, false, false) \ + D(OBJECT4_BACKGROUND, Object, JSObject, JSObject_Slots4, true, true) \ + D(OBJECT8, Object, JSObject, JSObject_Slots8, false, false) \ + D(OBJECT8_BACKGROUND, Object, JSObject, JSObject_Slots8, true, true) \ + D(OBJECT12, Object, JSObject, JSObject_Slots12, false, false) \ + D(OBJECT12_BACKGROUND, Object, JSObject, JSObject_Slots12, true, true) \ + D(OBJECT16, Object, JSObject, JSObject_Slots16, false, false) \ + D(OBJECT16_BACKGROUND, Object, JSObject, JSObject_Slots16, true, true) #define FOR_EACH_NONOBJECT_ALLOCKIND(D) \ - /* AllocKind TraceKind TypeName SizedType */ \ - D(SCRIPT, Script, JSScript, JSScript) \ - D(LAZY_SCRIPT, LazyScript, js::LazyScript, js::LazyScript) \ - D(SHAPE, Shape, js::Shape, js::Shape) \ - D(ACCESSOR_SHAPE, Shape, js::AccessorShape, js::AccessorShape) \ - D(BASE_SHAPE, BaseShape, js::BaseShape, js::BaseShape) \ - D(OBJECT_GROUP, ObjectGroup, js::ObjectGroup, js::ObjectGroup) \ - D(FAT_INLINE_STRING, String, JSFatInlineString, JSFatInlineString) \ - D(STRING, String, JSString, JSString) \ - D(EXTERNAL_STRING, String, JSExternalString, JSExternalString) \ - D(FAT_INLINE_ATOM, String, js::FatInlineAtom, js::FatInlineAtom) \ - D(ATOM, String, js::NormalAtom, js::NormalAtom) \ - D(SYMBOL, Symbol, JS::Symbol, JS::Symbol) \ - D(JITCODE, JitCode, js::jit::JitCode, js::jit::JitCode) \ - D(SCOPE, Scope, js::Scope, js::Scope) \ - D(REGEXP_SHARED, RegExpShared, js::RegExpShared, js::RegExpShared) + /* AllocKind TraceKind TypeName SizedType BGFinal Nursery */ \ + D(SCRIPT, Script, JSScript, JSScript, false, false) \ + D(LAZY_SCRIPT, LazyScript, js::LazyScript, js::LazyScript, true, false) \ + D(SHAPE, Shape, js::Shape, js::Shape, true, false) \ + D(ACCESSOR_SHAPE, Shape, js::AccessorShape, js::AccessorShape, true, false) \ + D(BASE_SHAPE, BaseShape, js::BaseShape, js::BaseShape, true, false) \ + D(OBJECT_GROUP, ObjectGroup, js::ObjectGroup, js::ObjectGroup, true, false) \ + D(FAT_INLINE_STRING, String, JSFatInlineString, JSFatInlineString, true, false) \ + D(STRING, String, JSString, JSString, true, false) \ + D(EXTERNAL_STRING, String, JSExternalString, JSExternalString, true, false) \ + D(FAT_INLINE_ATOM, String, js::FatInlineAtom, js::FatInlineAtom, true, false) \ + D(ATOM, String, js::NormalAtom, js::NormalAtom, true, false) \ + D(SYMBOL, Symbol, JS::Symbol, JS::Symbol, true, false) \ + D(JITCODE, JitCode, js::jit::JitCode, js::jit::JitCode, false, false) \ + D(SCOPE, Scope, js::Scope, js::Scope, true, false) \ + D(REGEXP_SHARED, RegExpShared, js::RegExpShared, js::RegExpShared, true, false) #define FOR_EACH_ALLOCKIND(D) \ FOR_EACH_OBJECT_ALLOCKIND(D) \ FOR_EACH_NONOBJECT_ALLOCKIND(D) -static_assert(int(AllocKind::FIRST) == 0, "Various places depend on AllocKind starting at 0, " - "please audit them carefully!"); -static_assert(int(AllocKind::OBJECT_FIRST) == 0, "Various places depend on AllocKind::OBJECT_FIRST " - "being 0, please audit them carefully!"); +// FIXME: uint8_t would make more sense for the underlying type, but causes +// miscompilations in GCC (fixed in 4.8.5 and 4.9.3). See also bug 1143966. +enum class AllocKind { +#define DEFINE_ALLOC_KIND(allocKind, _1, _2, _3, _4, _5) allocKind, + + FOR_EACH_OBJECT_ALLOCKIND(DEFINE_ALLOC_KIND) + + OBJECT_LIMIT, + OBJECT_LAST = OBJECT_LIMIT - 1, + + FOR_EACH_NONOBJECT_ALLOCKIND(DEFINE_ALLOC_KIND) + + LIMIT, + LAST = LIMIT - 1, + + FIRST = 0, + OBJECT_FIRST = FUNCTION // Hardcoded to first object kind. + +#undef DEFINE_ALLOC_KIND +}; + +static_assert(int(AllocKind::FIRST) == 0, + "Various places depend on AllocKind starting at 0"); +static_assert(int(AllocKind::OBJECT_FIRST) == 0, + "OBJECT_FIRST must be defined as the first object kind"); inline bool IsAllocKind(AllocKind kind) @@ -173,7 +163,7 @@ static inline JS::TraceKind MapAllocToTraceKind(AllocKind kind) { static const JS::TraceKind map[] = { -#define EXPAND_ELEMENT(allocKind, traceKind, type, sizedType) \ +#define EXPAND_ELEMENT(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ JS::TraceKind::traceKind, FOR_EACH_ALLOCKIND(EXPAND_ELEMENT) #undef EXPAND_ELEMENT @@ -195,37 +185,13 @@ static inline bool IsNurseryAllocable(AllocKind kind) { MOZ_ASSERT(IsValidAllocKind(kind)); + static const bool map[] = { - true, /* AllocKind::FUNCTION */ - true, /* AllocKind::FUNCTION_EXTENDED */ - false, /* AllocKind::OBJECT0 */ - true, /* AllocKind::OBJECT0_BACKGROUND */ - false, /* AllocKind::OBJECT2 */ - true, /* AllocKind::OBJECT2_BACKGROUND */ - false, /* AllocKind::OBJECT4 */ - true, /* AllocKind::OBJECT4_BACKGROUND */ - false, /* AllocKind::OBJECT8 */ - true, /* AllocKind::OBJECT8_BACKGROUND */ - false, /* AllocKind::OBJECT12 */ - true, /* AllocKind::OBJECT12_BACKGROUND */ - false, /* AllocKind::OBJECT16 */ - true, /* AllocKind::OBJECT16_BACKGROUND */ - false, /* AllocKind::SCRIPT */ - false, /* AllocKind::LAZY_SCRIPT */ - false, /* AllocKind::SHAPE */ - false, /* AllocKind::ACCESSOR_SHAPE */ - false, /* AllocKind::BASE_SHAPE */ - false, /* AllocKind::OBJECT_GROUP */ - false, /* AllocKind::FAT_INLINE_STRING */ - false, /* AllocKind::STRING */ - false, /* AllocKind::EXTERNAL_STRING */ - false, /* AllocKind::FAT_INLINE_ATOM */ - false, /* AllocKind::ATOM */ - false, /* AllocKind::SYMBOL */ - false, /* AllocKind::JITCODE */ - false, /* AllocKind::SCOPE */ - false, /* AllocKind::REGEXP_SHARED */ +#define DEFINE_NURSERY_ALLOCABLE(_1, _2, _3, _4, _5, nursery) nursery, + FOR_EACH_ALLOCKIND(DEFINE_NURSERY_ALLOCABLE) +#undef DEFINE_NURSERY_ALLOCABLE }; + JS_STATIC_ASSERT(JS_ARRAY_LENGTH(map) == size_t(AllocKind::LIMIT)); return map[size_t(kind)]; } @@ -234,37 +200,13 @@ static inline bool IsBackgroundFinalized(AllocKind kind) { MOZ_ASSERT(IsValidAllocKind(kind)); + static const bool map[] = { - true, /* AllocKind::FUNCTION */ - true, /* AllocKind::FUNCTION_EXTENDED */ - false, /* AllocKind::OBJECT0 */ - true, /* AllocKind::OBJECT0_BACKGROUND */ - false, /* AllocKind::OBJECT2 */ - true, /* AllocKind::OBJECT2_BACKGROUND */ - false, /* AllocKind::OBJECT4 */ - true, /* AllocKind::OBJECT4_BACKGROUND */ - false, /* AllocKind::OBJECT8 */ - true, /* AllocKind::OBJECT8_BACKGROUND */ - false, /* AllocKind::OBJECT12 */ - true, /* AllocKind::OBJECT12_BACKGROUND */ - false, /* AllocKind::OBJECT16 */ - true, /* AllocKind::OBJECT16_BACKGROUND */ - false, /* AllocKind::SCRIPT */ - true, /* AllocKind::LAZY_SCRIPT */ - true, /* AllocKind::SHAPE */ - true, /* AllocKind::ACCESSOR_SHAPE */ - true, /* AllocKind::BASE_SHAPE */ - true, /* AllocKind::OBJECT_GROUP */ - true, /* AllocKind::FAT_INLINE_STRING */ - true, /* AllocKind::STRING */ - true, /* AllocKind::EXTERNAL_STRING */ - true, /* AllocKind::FAT_INLINE_ATOM */ - true, /* AllocKind::ATOM */ - true, /* AllocKind::SYMBOL */ - false, /* AllocKind::JITCODE */ - true, /* AllocKind::SCOPE */ - true, /* AllocKind::REGEXP_SHARED */ +#define DEFINE_BACKGROUND_FINALIZED(_1, _2, _3, _4, bgFinal, _5) bgFinal, + FOR_EACH_ALLOCKIND(DEFINE_BACKGROUND_FINALIZED) +#undef DEFINE_BG_FINALIZE }; + JS_STATIC_ASSERT(JS_ARRAY_LENGTH(map) == size_t(AllocKind::LIMIT)); return map[size_t(kind)]; } diff --git a/js/src/gc/Allocator.cpp b/js/src/gc/Allocator.cpp index 16b703d698d9..a6886536c711 100644 --- a/js/src/gc/Allocator.cpp +++ b/js/src/gc/Allocator.cpp @@ -147,7 +147,7 @@ js::Allocate(JSContext* cx) return GCRuntime::tryNewTenuredThing(cx, kind, thingSize); } -#define DECL_ALLOCATOR_INSTANCES(allocKind, traceKind, type, sizedType) \ +#define DECL_ALLOCATOR_INSTANCES(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ template type* js::Allocate(JSContext* cx);\ template type* js::Allocate(JSContext* cx); FOR_EACH_NONOBJECT_ALLOCKIND(DECL_ALLOCATOR_INSTANCES) diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp index 432bf04cb7ad..7517c7162c2c 100644 --- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -359,7 +359,7 @@ const AllocKind gc::slotsToThingKind[] = { static_assert(JS_ARRAY_LENGTH(slotsToThingKind) == SLOTS_TO_THING_KIND_LIMIT, "We have defined a slot count for each kind."); -#define CHECK_THING_SIZE(allocKind, traceKind, type, sizedType) \ +#define CHECK_THING_SIZE(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ static_assert(sizeof(sizedType) >= SortedArenaList::MinThingSize, \ #sizedType " is smaller than SortedArenaList::MinThingSize!"); \ static_assert(sizeof(sizedType) >= sizeof(FreeSpan), \ @@ -372,7 +372,7 @@ FOR_EACH_ALLOCKIND(CHECK_THING_SIZE); #undef CHECK_THING_SIZE const uint32_t Arena::ThingSizes[] = { -#define EXPAND_THING_SIZE(allocKind, traceKind, type, sizedType) \ +#define EXPAND_THING_SIZE(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ sizeof(sizedType), FOR_EACH_ALLOCKIND(EXPAND_THING_SIZE) #undef EXPAND_THING_SIZE @@ -386,7 +386,7 @@ FreeSpan ArenaLists::placeholder; #define OFFSET(type) uint32_t(ArenaHeaderSize + (ArenaSize - ArenaHeaderSize) % sizeof(type)) const uint32_t Arena::FirstThingOffsets[] = { -#define EXPAND_FIRST_THING_OFFSET(allocKind, traceKind, type, sizedType) \ +#define EXPAND_FIRST_THING_OFFSET(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ OFFSET(sizedType), FOR_EACH_ALLOCKIND(EXPAND_FIRST_THING_OFFSET) #undef EXPAND_FIRST_THING_OFFSET @@ -397,7 +397,7 @@ FOR_EACH_ALLOCKIND(EXPAND_FIRST_THING_OFFSET) #define COUNT(type) uint32_t((ArenaSize - ArenaHeaderSize) / sizeof(type)) const uint32_t Arena::ThingsPerArena[] = { -#define EXPAND_THINGS_PER_ARENA(allocKind, traceKind, type, sizedType) \ +#define EXPAND_THINGS_PER_ARENA(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ COUNT(sizedType), FOR_EACH_ALLOCKIND(EXPAND_THINGS_PER_ARENA) #undef EXPAND_THINGS_PER_ARENA @@ -641,7 +641,7 @@ FinalizeArenas(FreeOp* fop, ArenaLists::KeepArenasEnum keepArenas) { switch (thingKind) { -#define EXPAND_CASE(allocKind, traceKind, type, sizedType) \ +#define EXPAND_CASE(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ case AllocKind::allocKind: \ return FinalizeTypedArenas(fop, src, dest, thingKind, budget, keepArenas); FOR_EACH_ALLOCKIND(EXPAND_CASE) @@ -1127,7 +1127,7 @@ static const char* AllocKindName(AllocKind kind) { static const char* names[] = { -#define EXPAND_THING_NAME(allocKind, _1, _2, _3) \ +#define EXPAND_THING_NAME(allocKind, _1, _2, _3, _4, _5) \ #allocKind, FOR_EACH_ALLOCKIND(EXPAND_THING_NAME) #undef EXPAND_THING_NAME @@ -2483,7 +2483,7 @@ UpdateArenaPointers(MovingTracer* trc, Arena* arena) AllocKind kind = arena->getAllocKind(); switch (kind) { -#define EXPAND_CASE(allocKind, traceKind, type, sizedType) \ +#define EXPAND_CASE(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ case AllocKind::allocKind: \ UpdateArenaPointersTyped(trc, arena, JS::TraceKind::traceKind); \ return; @@ -3833,7 +3833,7 @@ static const char* AllocKindToAscii(AllocKind kind) { switch(kind) { -#define MAKE_CASE(allocKind, traceKind, type, sizedType) \ +#define MAKE_CASE(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ case AllocKind:: allocKind: return #allocKind; FOR_EACH_ALLOCKIND(MAKE_CASE) #undef MAKE_CASE diff --git a/js/src/jsgc.h b/js/src/jsgc.h index 29e5c67e7a5a..38d4c59886e3 100644 --- a/js/src/jsgc.h +++ b/js/src/jsgc.h @@ -55,7 +55,7 @@ struct Cell; * The AllocKind is available as MapTypeToFinalizeKind::kind. */ template struct MapTypeToFinalizeKind {}; -#define EXPAND_MAPTYPETOFINALIZEKIND(allocKind, traceKind, type, sizedType) \ +#define EXPAND_MAPTYPETOFINALIZEKIND(allocKind, traceKind, type, sizedType, bgFinal, nursery) \ template <> struct MapTypeToFinalizeKind { \ static const AllocKind kind = AllocKind::allocKind; \ }; From 16b94b0812706c53c0073d2ca2a0bd179dd16816 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Thu, 2 Nov 2017 11:34:22 +0000 Subject: [PATCH 05/33] Bug 1413635 - Give AllocKind enum a uint8_t base r=sfink --- js/src/gc/AllocKind.h | 4 +--- js/src/gc/Cell.h | 2 +- js/src/gc/Nursery.h | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/js/src/gc/AllocKind.h b/js/src/gc/AllocKind.h index a4556df78621..3c0416edac45 100644 --- a/js/src/gc/AllocKind.h +++ b/js/src/gc/AllocKind.h @@ -73,9 +73,7 @@ namespace gc { FOR_EACH_OBJECT_ALLOCKIND(D) \ FOR_EACH_NONOBJECT_ALLOCKIND(D) -// FIXME: uint8_t would make more sense for the underlying type, but causes -// miscompilations in GCC (fixed in 4.8.5 and 4.9.3). See also bug 1143966. -enum class AllocKind { +enum class AllocKind : uint8_t { #define DEFINE_ALLOC_KIND(allocKind, _1, _2, _3, _4, _5) allocKind, FOR_EACH_OBJECT_ALLOCKIND(DEFINE_ALLOC_KIND) diff --git a/js/src/gc/Cell.h b/js/src/gc/Cell.h index 0a04451373d1..57e5fe16aa65 100644 --- a/js/src/gc/Cell.h +++ b/js/src/gc/Cell.h @@ -42,7 +42,7 @@ TraceManuallyBarrieredGenericPointerEdge(JSTracer* trc, gc::Cell** thingp, const namespace gc { class Arena; -enum class AllocKind; +enum class AllocKind : uint8_t; struct Chunk; class TenuredCell; diff --git a/js/src/gc/Nursery.h b/js/src/gc/Nursery.h index 08ecbe099880..3deb3e5db55c 100644 --- a/js/src/gc/Nursery.h +++ b/js/src/gc/Nursery.h @@ -65,7 +65,7 @@ struct Cell; class MinorCollectionTracer; class RelocationOverlay; struct TenureCountCache; -enum class AllocKind; +enum class AllocKind : uint8_t; class TenuredCell; } /* namespace gc */ From 1d2a51a40b043bf817582f27cfcd6fa07160f9d3 Mon Sep 17 00:00:00 2001 From: sotaro Date: Thu, 2 Nov 2017 21:31:48 +0900 Subject: [PATCH 06/33] Bug 1408490 - Re-enable dom/plugins/test/mochitest/test_bug1092842.html r=jmaher --- dom/plugins/test/mochitest/mochitest.ini | 1 - 1 file changed, 1 deletion(-) diff --git a/dom/plugins/test/mochitest/mochitest.ini b/dom/plugins/test/mochitest/mochitest.ini index b8911673e98d..c86ca9661bb3 100644 --- a/dom/plugins/test/mochitest/mochitest.ini +++ b/dom/plugins/test/mochitest/mochitest.ini @@ -59,7 +59,6 @@ skip-if = toolkit == 'android' # needs plugin support [test_bug985859.html] [test_bug986930.html] [test_bug1092842.html] -skip-if = os == "win" && debug # Bug 1408490 [test_bug1165981.html] [test_bug1245545.html] [test_bug1307694.html] From eb82e601992378824f225e6de628575d9c224fb7 Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 13:56:53 +0100 Subject: [PATCH 07/33] Bug 1083482 part 4 - Remove more self-hosting code. r=anba --- js/src/builtin/Iterator.js | 66 -------------------------------- js/src/builtin/Utilities.js | 4 -- js/src/builtin/WeakMapObject.cpp | 35 +++++------------ js/src/builtin/WeakMapObject.h | 11 ------ js/src/vm/GlobalObject.cpp | 2 - js/src/vm/SelfHosting.cpp | 29 -------------- 6 files changed, 10 insertions(+), 137 deletions(-) diff --git a/js/src/builtin/Iterator.js b/js/src/builtin/Iterator.js index 2771f0654179..995911e89254 100644 --- a/js/src/builtin/Iterator.js +++ b/js/src/builtin/Iterator.js @@ -5,69 +5,3 @@ function IteratorIdentity() { return this; } - -var LegacyIteratorWrapperMap = new std_WeakMap(); - -function LegacyIteratorNext(arg) { - var iter = callFunction(std_WeakMap_get, LegacyIteratorWrapperMap, this); - try { - return { value: callContentFunction(iter.next, iter, arg), done: false }; - } catch (e) { - if (e instanceof std_StopIteration) - return { value: undefined, done: true }; - throw e; - } -} - -function LegacyIteratorThrow(exn) { - var iter = callFunction(std_WeakMap_get, LegacyIteratorWrapperMap, this); - try { - return { value: callContentFunction(iter.throw, iter, exn), done: false }; - } catch (e) { - if (e instanceof std_StopIteration) - return { value: undefined, done: true }; - throw e; - } -} - -function LegacyGeneratorIterator(iter) { - callFunction(std_WeakMap_set, LegacyIteratorWrapperMap, this, iter); -} - -var LegacyIteratorsInitialized = std_Object_create(null); - -function InitLegacyIterators() { - var props = std_Object_create(null); - - props.next = std_Object_create(null); - props.next.value = LegacyIteratorNext; - props.next.enumerable = false; - props.next.configurable = true; - props.next.writable = true; - - props[std_iterator] = std_Object_create(null); - props[std_iterator].value = IteratorIdentity; - props[std_iterator].enumerable = false; - props[std_iterator].configurable = true; - props[std_iterator].writable = true; - - props.throw = std_Object_create(null); - props.throw.value = LegacyIteratorThrow; - props.throw.enumerable = false; - props.throw.configurable = true; - props.throw.writable = true; - - var LegacyGeneratorIteratorProto = std_Object_create(GetIteratorPrototype(), props); - MakeConstructible(LegacyGeneratorIterator, LegacyGeneratorIteratorProto); - - LegacyIteratorsInitialized.initialized = true; -} - -function LegacyGeneratorIteratorShim() { - var iter = ToObject(this); - - if (!LegacyIteratorsInitialized.initialized) - InitLegacyIterators(); - - return new LegacyGeneratorIterator(iter); -} diff --git a/js/src/builtin/Utilities.js b/js/src/builtin/Utilities.js index 0aa8ec4f2b73..85c66dfbf239 100644 --- a/js/src/builtin/Utilities.js +++ b/js/src/builtin/Utilities.js @@ -53,10 +53,6 @@ // // Symbol is a bare constructor without properties or methods. var std_Symbol = Symbol; -// WeakMap is a bare constructor without properties or methods. -var std_WeakMap = WeakMap; -// StopIteration is a bare constructor without properties or methods. -var std_StopIteration = StopIteration; /********** List specification type **********/ diff --git a/js/src/builtin/WeakMapObject.cpp b/js/src/builtin/WeakMapObject.cpp index 027a4f9d0cc7..bfacd6a95686 100644 --- a/js/src/builtin/WeakMapObject.cpp +++ b/js/src/builtin/WeakMapObject.cpp @@ -74,8 +74,8 @@ WeakMap_get_impl(JSContext* cx, const CallArgs& args) return true; } -bool -js::WeakMap_get(JSContext* cx, unsigned argc, Value* vp) +static bool +WeakMap_get(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); return CallNonGenericMethod(cx, args); @@ -130,8 +130,8 @@ WeakMap_set_impl(JSContext* cx, const CallArgs& args) return true; } -bool -js::WeakMap_set(JSContext* cx, unsigned argc, Value* vp) +static bool +WeakMap_set(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); return CallNonGenericMethod(cx, args); @@ -295,8 +295,8 @@ static const JSFunctionSpec weak_map_methods[] = { JS_FS_END }; -static JSObject* -InitWeakMapClass(JSContext* cx, HandleObject obj, bool defineMembers) +JSObject* +js::InitWeakMapClass(JSContext* cx, HandleObject obj) { MOZ_ASSERT(obj->isNative()); @@ -314,27 +314,12 @@ InitWeakMapClass(JSContext* cx, HandleObject obj, bool defineMembers) if (!LinkConstructorAndPrototype(cx, ctor, proto)) return nullptr; - if (defineMembers) { - if (!DefinePropertiesAndFunctions(cx, proto, nullptr, weak_map_methods)) - return nullptr; - if (!DefineToStringTag(cx, proto, cx->names().WeakMap)) - return nullptr; - } + if (!DefinePropertiesAndFunctions(cx, proto, nullptr, weak_map_methods)) + return nullptr; + if (!DefineToStringTag(cx, proto, cx->names().WeakMap)) + return nullptr; if (!GlobalObject::initBuiltinConstructor(cx, global, JSProto_WeakMap, ctor, proto)) return nullptr; return proto; } - -JSObject* -js::InitWeakMapClass(JSContext* cx, HandleObject obj) -{ - return InitWeakMapClass(cx, obj, true); -} - -JSObject* -js::InitBareWeakMapCtor(JSContext* cx, HandleObject obj) -{ - return InitWeakMapClass(cx, obj, false); -} - diff --git a/js/src/builtin/WeakMapObject.h b/js/src/builtin/WeakMapObject.h index 03e70d8b62e5..b597dae37f9c 100644 --- a/js/src/builtin/WeakMapObject.h +++ b/js/src/builtin/WeakMapObject.h @@ -32,17 +32,6 @@ class WeakMapObject : public WeakCollectionObject static const Class class_; }; -// WeakMap methods exposed so they can be installed in the self-hosting global. - -extern bool -WeakMap_get(JSContext* cx, unsigned argc, Value* vp); - -extern bool -WeakMap_set(JSContext* cx, unsigned argc, Value* vp); - -extern JSObject* -InitBareWeakMapCtor(JSContext* cx, HandleObject obj); - extern JSObject* InitWeakMapClass(JSContext* cx, HandleObject obj); diff --git a/js/src/vm/GlobalObject.cpp b/js/src/vm/GlobalObject.cpp index f9c085700c24..9770ee1096fe 100644 --- a/js/src/vm/GlobalObject.cpp +++ b/js/src/vm/GlobalObject.cpp @@ -521,8 +521,6 @@ GlobalObject::initSelfHostingBuiltins(JSContext* cx, Handle globa InitBareBuiltinCtor(cx, global, JSProto_Uint8Array) && InitBareBuiltinCtor(cx, global, JSProto_Int32Array) && InitBareSymbolCtor(cx, global) && - InitBareWeakMapCtor(cx, global) && - InitStopIterationClass(cx, global) && DefineFunctions(cx, global, builtins, AsIntrinsic); } diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index 58d2244dc9d2..b1b6d6ff6f1f 100644 --- a/js/src/vm/SelfHosting.cpp +++ b/js/src/vm/SelfHosting.cpp @@ -727,20 +727,6 @@ intrinsic_IsPackedArray(JSContext* cx, unsigned argc, Value* vp) return true; } -static bool -intrinsic_GetIteratorPrototype(JSContext* cx, unsigned argc, Value* vp) -{ - CallArgs args = CallArgsFromVp(argc, vp); - MOZ_ASSERT(args.length() == 0); - - JSObject* obj = GlobalObject::getOrCreateIteratorPrototype(cx, cx->global()); - if (!obj) - return false; - - args.rval().setObject(*obj); - return true; -} - bool js::intrinsic_NewArrayIterator(JSContext* cx, unsigned argc, Value* vp) { @@ -875,14 +861,6 @@ js::intrinsic_IsSuspendedStarGenerator(JSContext* cx, unsigned argc, Value* vp) return true; } -static bool -intrinsic_ThrowStopIteration(JSContext* cx, unsigned argc, Value* vp) -{ - MOZ_ASSERT(CallArgsFromVp(argc, vp).length() == 0); - - return ThrowStopIteration(cx); -} - static bool intrinsic_GeneratorIsRunning(JSContext* cx, unsigned argc, Value* vp) { @@ -2288,9 +2266,6 @@ static const JSFunctionSpec intrinsic_functions[] = { JS_FN("std_TypedArray_buffer", js::TypedArray_bufferGetter, 1,0), - JS_FN("std_WeakMap_get", WeakMap_get, 1,0), - JS_FN("std_WeakMap_set", WeakMap_set, 2,0), - JS_FN("std_SIMD_Int8x16_extractLane", simd_int8x16_extractLane, 2,0), JS_FN("std_SIMD_Int16x8_extractLane", simd_int16x8_extractLane, 2,0), JS_INLINABLE_FN("std_SIMD_Int32x4_extractLane", simd_int32x4_extractLane, 2,0, SimdInt32x4_extractLane), @@ -2362,8 +2337,6 @@ static const JSFunctionSpec intrinsic_functions[] = { JS_INLINABLE_FN("IsPackedArray", intrinsic_IsPackedArray, 1,0, IntrinsicIsPackedArray), - JS_FN("GetIteratorPrototype", intrinsic_GetIteratorPrototype, 0,0), - JS_INLINABLE_FN("NewArrayIterator", intrinsic_NewArrayIterator, 0,0, IntrinsicNewArrayIterator), @@ -2408,8 +2381,6 @@ static const JSFunctionSpec intrinsic_functions[] = { JS_FN("StarGeneratorObjectIsClosed", intrinsic_StarGeneratorObjectIsClosed, 1,0), JS_FN("IsSuspendedStarGenerator",intrinsic_IsSuspendedStarGenerator,1,0), - JS_FN("ThrowStopIteration", intrinsic_ThrowStopIteration, 0,0), - JS_FN("GeneratorIsRunning", intrinsic_GeneratorIsRunning, 1,0), JS_FN("GeneratorSetClosed", intrinsic_GeneratorSetClosed, 1,0), From 65a01dd0f9f6e1b43ab5eeeab3561cf9ede7d1fa Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 13:58:13 +0100 Subject: [PATCH 08/33] Bug 1083482 part 5 - Clean up CloseIterator, remove UnwindIteratorForException. r=arai --- js/src/jit/BaselineIC.cpp | 7 +++---- js/src/jit/CodeGenerator.cpp | 8 ++++---- js/src/jit/JitFrames.cpp | 12 +++--------- js/src/jit/VMFunctions.cpp | 6 ++++++ js/src/jit/VMFunctions.h | 3 +++ js/src/jsiter.cpp | 20 ++------------------ js/src/jsiter.h | 7 ++----- js/src/proxy/CrossCompartmentWrapper.cpp | 7 +++---- js/src/vm/Interpreter.cpp | 17 +++-------------- 9 files changed, 29 insertions(+), 58 deletions(-) diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index 50bd50dfaa0a..419f0a6733b5 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -4274,16 +4274,15 @@ ICIteratorMore_Native::Compiler::generateStubCode(MacroAssembler& masm) // IteratorClose_Fallback // -static bool +static void DoIteratorCloseFallback(JSContext* cx, ICIteratorClose_Fallback* stub, HandleValue iterValue) { FallbackICSpew(cx, stub, "IteratorClose"); - RootedObject iteratorObject(cx, &iterValue.toObject()); - return CloseIterator(cx, iteratorObject); + CloseIterator(&iterValue.toObject()); } -typedef bool (*DoIteratorCloseFallbackFn)(JSContext*, ICIteratorClose_Fallback*, HandleValue); +typedef void (*DoIteratorCloseFallbackFn)(JSContext*, ICIteratorClose_Fallback*, HandleValue); static const VMFunction DoIteratorCloseFallbackInfo = FunctionInfo(DoIteratorCloseFallback, "DoIteratorCloseFallback", TailCall); diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp index d0cf706f9069..22c0a3163232 100644 --- a/js/src/jit/CodeGenerator.cpp +++ b/js/src/jit/CodeGenerator.cpp @@ -9291,9 +9291,9 @@ CodeGenerator::visitIsNoIterAndBranch(LIsNoIterAndBranch* lir) masm.jump(ifFalse); } -typedef bool (*CloseIteratorFn)(JSContext*, HandleObject); -static const VMFunction CloseIteratorInfo = - FunctionInfo(CloseIterator, "CloseIterator"); +typedef void (*CloseIteratorFromIonFn)(JSContext*, JSObject*); +static const VMFunction CloseIteratorFromIonInfo = + FunctionInfo(CloseIteratorFromIon, "CloseIteratorFromIon"); void CodeGenerator::visitIteratorEnd(LIteratorEnd* lir) @@ -9303,7 +9303,7 @@ CodeGenerator::visitIteratorEnd(LIteratorEnd* lir) const Register temp2 = ToRegister(lir->temp2()); const Register temp3 = ToRegister(lir->temp3()); - OutOfLineCode* ool = oolCallVM(CloseIteratorInfo, lir, ArgList(obj), StoreNothing()); + OutOfLineCode* ool = oolCallVM(CloseIteratorFromIonInfo, lir, ArgList(obj), StoreNothing()); LoadNativeIterator(masm, obj, temp1, ool->entry()); diff --git a/js/src/jit/JitFrames.cpp b/js/src/jit/JitFrames.cpp index 98623e20d8c1..2370c43b8818 100644 --- a/js/src/jit/JitFrames.cpp +++ b/js/src/jit/JitFrames.cpp @@ -139,7 +139,7 @@ CloseLiveIteratorIon(JSContext* cx, const InlineFrameIterator& frame, JSTryNote* if (cx->isExceptionPending()) { if (tn->kind == JSTRY_FOR_IN) - UnwindIteratorForException(cx, iterObject); + CloseIterator(iterObject); else IteratorCloseForException(cx, iterObject); } else { @@ -429,14 +429,8 @@ ProcessTryNotesBaseline(JSContext* cx, const JSJitFrameIter& frame, EnvironmentI uint8_t* stackPointer; BaselineFrameAndStackPointersFromTryNote(tn, frame, &framePointer, &stackPointer); Value iterValue(*reinterpret_cast(stackPointer)); - RootedObject iterObject(cx, &iterValue.toObject()); - if (!UnwindIteratorForException(cx, iterObject)) { - // See comment in the JSTRY_FOR_IN case in Interpreter.cpp's - // ProcessTryNotes. - SettleOnTryNote(cx, tn, frame, ei, rfe, pc); - MOZ_ASSERT(**pc == JSOP_ENDITER); - return false; - } + JSObject* iterObject = &iterValue.toObject(); + CloseIterator(iterObject); break; } diff --git a/js/src/jit/VMFunctions.cpp b/js/src/jit/VMFunctions.cpp index 538357b5ac8a..ac2d82fc0422 100644 --- a/js/src/jit/VMFunctions.cpp +++ b/js/src/jit/VMFunctions.cpp @@ -1835,6 +1835,12 @@ GetPrototypeOf(JSContext* cx, HandleObject target, MutableHandleValue rval) return true; } +void +CloseIteratorFromIon(JSContext* cx, JSObject* obj) +{ + CloseIterator(obj); +} + typedef bool (*SetObjectElementFn)(JSContext*, HandleObject, HandleValue, HandleValue, HandleValue, bool); const VMFunction SetObjectElementInfo = diff --git a/js/src/jit/VMFunctions.h b/js/src/jit/VMFunctions.h index e79c62f1b8bb..42af6beddb48 100644 --- a/js/src/jit/VMFunctions.h +++ b/js/src/jit/VMFunctions.h @@ -894,6 +894,9 @@ TypeOfObject(JSObject* obj, JSRuntime* rt); bool GetPrototypeOf(JSContext* cx, HandleObject target, MutableHandleValue rval); +void +CloseIteratorFromIon(JSContext* cx, JSObject* obj); + extern const VMFunction SetObjectElementInfo; } // namespace jit diff --git a/js/src/jsiter.cpp b/js/src/jsiter.cpp index 54b6e97857bc..d33a5480acd1 100644 --- a/js/src/jsiter.cpp +++ b/js/src/jsiter.cpp @@ -1263,8 +1263,8 @@ js::ValueToIterator(JSContext* cx, unsigned flags, HandleValue vp) return GetIterator(cx, obj, flags); } -bool -js::CloseIterator(JSContext* cx, HandleObject obj) +void +js::CloseIterator(JSObject* obj) { if (obj->is()) { /* Remove enumerators from the active list, which is a stack. */ @@ -1283,22 +1283,6 @@ js::CloseIterator(JSContext* cx, HandleObject obj) ni->props_cursor = ni->props_array; } } - - return true; -} - -bool -js::UnwindIteratorForException(JSContext* cx, HandleObject obj) -{ - RootedValue v(cx); - bool getOk = cx->getPendingException(&v); - cx->clearPendingException(); - if (!CloseIterator(cx, obj)) - return false; - if (!getOk) - return false; - cx->setPendingException(v); - return true; } bool diff --git a/js/src/jsiter.h b/js/src/jsiter.h index 943794378989..d2e7560a79f5 100644 --- a/js/src/jsiter.h +++ b/js/src/jsiter.h @@ -182,11 +182,8 @@ NewEmptyPropertyIterator(JSContext* cx, unsigned flags); JSObject* ValueToIterator(JSContext* cx, unsigned flags, HandleValue vp); -bool -CloseIterator(JSContext* cx, HandleObject iterObj); - -bool -UnwindIteratorForException(JSContext* cx, HandleObject obj); +void +CloseIterator(JSObject* obj); bool IteratorCloseForException(JSContext* cx, HandleObject obj); diff --git a/js/src/proxy/CrossCompartmentWrapper.cpp b/js/src/proxy/CrossCompartmentWrapper.cpp index 8d932aec2a10..c8aaee6bfa08 100644 --- a/js/src/proxy/CrossCompartmentWrapper.cpp +++ b/js/src/proxy/CrossCompartmentWrapper.cpp @@ -266,17 +266,16 @@ CanReify(HandleObject obj) struct AutoCloseIterator { - AutoCloseIterator(JSContext* cx, PropertyIteratorObject* obj) : cx(cx), obj(cx, obj) {} + AutoCloseIterator(JSContext* cx, PropertyIteratorObject* obj) : obj(cx, obj) {} ~AutoCloseIterator() { if (obj) - MOZ_ALWAYS_TRUE(CloseIterator(cx, obj)); + CloseIterator(obj); } void clear() { obj = nullptr; } private: - JSContext* cx; Rooted obj; }; @@ -314,7 +313,7 @@ Reify(JSContext* cx, JSCompartment* origin, HandleObject objp) } close.clear(); - MOZ_ALWAYS_TRUE(CloseIterator(cx, iterObj)); + CloseIterator(iterObj); obj = EnumeratedIdVectorToIterator(cx, obj, ni->flags, keys); } diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp index 479bad4ae6dc..dc8432250022 100644 --- a/js/src/vm/Interpreter.cpp +++ b/js/src/vm/Interpreter.cpp @@ -1270,16 +1270,8 @@ ProcessTryNotes(JSContext* cx, EnvironmentIter& ei, InterpreterRegs& regs) DebugOnly pc = regs.fp()->script()->main() + tn->start + tn->length; MOZ_ASSERT(JSOp(*pc) == JSOP_ENDITER); Value* sp = regs.spForStackDepth(tn->stackDepth); - RootedObject obj(cx, &sp[-1].toObject()); - if (!UnwindIteratorForException(cx, obj)) { - // We should only settle on the note only if - // UnwindIteratorForException itself threw, as - // onExceptionUnwind should be called anew with the new - // location of the throw (the iterator). Indeed, we must - // settle to avoid infinitely handling the same exception. - SettleOnTryNote(cx, tn, ei, regs); - return ErrorReturnContinuation; - } + JSObject* obj = &sp[-1].toObject(); + CloseIterator(obj); break; } @@ -2280,11 +2272,8 @@ CASE(JSOP_ENDITER) { MOZ_ASSERT(REGS.stackDepth() >= 1); COUNT_COVERAGE(); - ReservedRooted obj(&rootObject0, ®S.sp[-1].toObject()); - bool ok = CloseIterator(cx, obj); + CloseIterator(®S.sp[-1].toObject()); REGS.sp--; - if (!ok) - goto error; } END_CASE(JSOP_ENDITER) From 07fabe71507182b3b2ca6ae065c67965850cdb21 Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 13:58:45 +0100 Subject: [PATCH 09/33] Bug 1083482 part 6 - Merge GeneratorObject and StarGeneratorObject. r=arai --- js/src/jit/BaselineIC.cpp | 4 ++-- js/src/vm/GeneratorObject.cpp | 12 ++++-------- js/src/vm/GeneratorObject.h | 19 ++++--------------- js/src/vm/SelfHosting.cpp | 10 +++++----- 4 files changed, 15 insertions(+), 30 deletions(-) diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index 419f0a6733b5..4c93da39ac0f 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -3454,7 +3454,7 @@ ICCall_IsSuspendedStarGenerator::Compiler::generateStubCode(MacroAssembler& masm // Check if it's a StarGeneratorObject. Register scratch = regs.takeAny(); - masm.branchTestObjClass(Assembler::NotEqual, genObj, scratch, &StarGeneratorObject::class_, + masm.branchTestObjClass(Assembler::NotEqual, genObj, scratch, &GeneratorObject::class_, &returnFalse); // If the yield index slot holds an int32 value < YIELD_AND_AWAIT_INDEX_CLOSING, @@ -3463,7 +3463,7 @@ ICCall_IsSuspendedStarGenerator::Compiler::generateStubCode(MacroAssembler& masm masm.branchTestInt32(Assembler::NotEqual, argVal, &returnFalse); masm.unboxInt32(argVal, scratch); masm.branch32(Assembler::AboveOrEqual, scratch, - Imm32(StarGeneratorObject::YIELD_AND_AWAIT_INDEX_CLOSING), + Imm32(GeneratorObject::YIELD_AND_AWAIT_INDEX_CLOSING), &returnFalse); masm.moveValue(BooleanValue(true), R0); diff --git a/js/src/vm/GeneratorObject.cpp b/js/src/vm/GeneratorObject.cpp index de09e696ae55..ff6f8ac13ac4 100644 --- a/js/src/vm/GeneratorObject.cpp +++ b/js/src/vm/GeneratorObject.cpp @@ -38,7 +38,7 @@ GeneratorObject::create(JSContext* cx, AbstractFramePtr frame) return nullptr; } RootedNativeObject obj(cx, - NewNativeObjectWithGivenProto(cx, &StarGeneratorObject::class_, proto)); + NewNativeObjectWithGivenProto(cx, &GeneratorObject::class_, proto)); if (!obj) return nullptr; @@ -123,12 +123,8 @@ js::GeneratorThrowOrClose(JSContext* cx, AbstractFramePtr frame, Handleis()) { - MOZ_ASSERT(arg.isObject()); - frame.setReturnValue(arg); - } else { - MOZ_ASSERT(arg.isUndefined()); - } + MOZ_ASSERT(arg.isObject()); + frame.setReturnValue(arg); cx->setPendingException(MagicValue(JS_GENERATOR_CLOSING)); genObj->setClosing(); @@ -187,7 +183,7 @@ GeneratorObject::resume(JSContext* cx, InterpreterActivation& activation, } } -const Class StarGeneratorObject::class_ = { +const Class GeneratorObject::class_ = { "Generator", JSCLASS_HAS_RESERVED_SLOTS(GeneratorObject::RESERVED_SLOTS) }; diff --git a/js/src/vm/GeneratorObject.h b/js/src/vm/GeneratorObject.h index 74f5f2816175..9bdde447b927 100644 --- a/js/src/vm/GeneratorObject.h +++ b/js/src/vm/GeneratorObject.h @@ -36,6 +36,8 @@ class GeneratorObject : public NativeObject enum ResumeKind { NEXT, THROW, CLOSE }; + static const Class class_; + private: static bool suspend(JSContext* cx, HandleObject obj, AbstractFramePtr frame, jsbytecode* pc, Value* vp, unsigned nvalues); @@ -185,10 +187,10 @@ class GeneratorObject : public NativeObject bool isAfterYield(); bool isAfterAwait(); -private: + private: bool isAfterYieldOrAwait(JSOp op); -public: + public: static size_t offsetOfCalleeSlot() { return getFixedSlotOffset(CALLEE_SLOT); } @@ -209,12 +211,6 @@ public: } }; -class StarGeneratorObject : public GeneratorObject -{ - public: - static const Class class_; -}; - bool GeneratorThrowOrClose(JSContext* cx, AbstractFramePtr frame, Handle obj, HandleValue val, uint32_t resumeKind); void SetGeneratorClosed(JSContext* cx, AbstractFramePtr frame); @@ -224,11 +220,4 @@ CheckStarGeneratorResumptionValue(JSContext* cx, HandleValue v); } // namespace js -template<> -inline bool -JSObject::is() const -{ - return is(); -} - #endif /* vm_GeneratorObject_h */ diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index b1b6d6ff6f1f..abd2fc0cf6b4 100644 --- a/js/src/vm/SelfHosting.cpp +++ b/js/src/vm/SelfHosting.cpp @@ -840,7 +840,7 @@ intrinsic_StarGeneratorObjectIsClosed(JSContext* cx, unsigned argc, Value* vp) MOZ_ASSERT(args.length() == 1); MOZ_ASSERT(args[0].isObject()); - StarGeneratorObject* genObj = &args[0].toObject().as(); + GeneratorObject* genObj = &args[0].toObject().as(); args.rval().setBoolean(genObj->isClosed()); return true; } @@ -851,12 +851,12 @@ js::intrinsic_IsSuspendedStarGenerator(JSContext* cx, unsigned argc, Value* vp) CallArgs args = CallArgsFromVp(argc, vp); MOZ_ASSERT(args.length() == 1); - if (!args[0].isObject() || !args[0].toObject().is()) { + if (!args[0].isObject() || !args[0].toObject().is()) { args.rval().setBoolean(false); return true; } - StarGeneratorObject& genObj = args[0].toObject().as(); + GeneratorObject& genObj = args[0].toObject().as(); args.rval().setBoolean(!genObj.isClosed() && genObj.isSuspended()); return true; } @@ -2377,7 +2377,7 @@ static const JSFunctionSpec intrinsic_functions[] = { CallNonGenericSelfhostedMethod>, 2,0), JS_FN("IsStarGeneratorObject", - intrinsic_IsInstanceOfBuiltin, 1,0), + intrinsic_IsInstanceOfBuiltin, 1,0), JS_FN("StarGeneratorObjectIsClosed", intrinsic_StarGeneratorObjectIsClosed, 1,0), JS_FN("IsSuspendedStarGenerator",intrinsic_IsSuspendedStarGenerator,1,0), @@ -2450,7 +2450,7 @@ static const JSFunctionSpec intrinsic_functions[] = { CallNonGenericSelfhostedMethod>, 2, 0), JS_FN("CallStarGeneratorMethodIfWrapped", - CallNonGenericSelfhostedMethod>, 2, 0), + CallNonGenericSelfhostedMethod>, 2, 0), JS_INLINABLE_FN("IsMapObject", intrinsic_IsInstanceOfBuiltin, 1, 0, IntrinsicIsMapObject), From b92c6639709cc24652cd7279cea7f8cc7faf5b44 Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 14:02:06 +0100 Subject: [PATCH 10/33] Bug 1083482 part 7 - Rename StarGenerator to Generator in self-hosted code. r=anba --- js/src/builtin/Generator.js | 42 ++++++++++++++++----------------- js/src/jit/BaselineIC.cpp | 14 +++++------ js/src/jit/BaselineIC.h | 10 ++++---- js/src/jit/BaselineICList.h | 2 +- js/src/jscntxt.h | 3 --- js/src/vm/AsyncFunction.cpp | 4 ++-- js/src/vm/AsyncIteration.cpp | 6 ++--- js/src/vm/CommonPropertyNames.h | 6 ++--- js/src/vm/GeneratorObject.cpp | 6 ++--- js/src/vm/SelfHosting.cpp | 12 +++++----- js/src/vm/SelfHosting.h | 3 +++ 11 files changed, 54 insertions(+), 54 deletions(-) diff --git a/js/src/builtin/Generator.js b/js/src/builtin/Generator.js index 7d6c54305d67..b9451cf00c2a 100644 --- a/js/src/builtin/Generator.js +++ b/js/src/builtin/Generator.js @@ -2,16 +2,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -function StarGeneratorNext(val) { - // The IsSuspendedStarGenerator call below is not necessary for - // correctness. It's a performance optimization to check for the - // common case with a single call. It's also inlined in Baseline. +function GeneratorNext(val) { + // The IsSuspendedGenerator call below is not necessary for correctness. + // It's a performance optimization to check for the common case with a + // single call. It's also inlined in Baseline. - if (!IsSuspendedStarGenerator(this)) { - if (!IsObject(this) || !IsStarGeneratorObject(this)) - return callFunction(CallStarGeneratorMethodIfWrapped, this, val, "StarGeneratorNext"); + if (!IsSuspendedGenerator(this)) { + if (!IsObject(this) || !IsGeneratorObject(this)) + return callFunction(CallGeneratorMethodIfWrapped, this, val, "GeneratorNext"); - if (StarGeneratorObjectIsClosed(this)) + if (GeneratorObjectIsClosed(this)) return { value: undefined, done: true }; if (GeneratorIsRunning(this)) @@ -21,18 +21,18 @@ function StarGeneratorNext(val) { try { return resumeGenerator(this, val, "next"); } catch (e) { - if (!StarGeneratorObjectIsClosed(this)) + if (!GeneratorObjectIsClosed(this)) GeneratorSetClosed(this); throw e; } } -function StarGeneratorThrow(val) { - if (!IsSuspendedStarGenerator(this)) { - if (!IsObject(this) || !IsStarGeneratorObject(this)) - return callFunction(CallStarGeneratorMethodIfWrapped, this, val, "StarGeneratorThrow"); +function GeneratorThrow(val) { + if (!IsSuspendedGenerator(this)) { + if (!IsObject(this) || !IsGeneratorObject(this)) + return callFunction(CallGeneratorMethodIfWrapped, this, val, "GeneratorThrow"); - if (StarGeneratorObjectIsClosed(this)) + if (GeneratorObjectIsClosed(this)) throw val; if (GeneratorIsRunning(this)) @@ -42,18 +42,18 @@ function StarGeneratorThrow(val) { try { return resumeGenerator(this, val, "throw"); } catch (e) { - if (!StarGeneratorObjectIsClosed(this)) + if (!GeneratorObjectIsClosed(this)) GeneratorSetClosed(this); throw e; } } -function StarGeneratorReturn(val) { - if (!IsSuspendedStarGenerator(this)) { - if (!IsObject(this) || !IsStarGeneratorObject(this)) - return callFunction(CallStarGeneratorMethodIfWrapped, this, val, "StarGeneratorReturn"); +function GeneratorReturn(val) { + if (!IsSuspendedGenerator(this)) { + if (!IsObject(this) || !IsGeneratorObject(this)) + return callFunction(CallGeneratorMethodIfWrapped, this, val, "GeneratorReturn"); - if (StarGeneratorObjectIsClosed(this)) + if (GeneratorObjectIsClosed(this)) return { value: val, done: true }; if (GeneratorIsRunning(this)) @@ -64,7 +64,7 @@ function StarGeneratorReturn(val) { var rval = { value: val, done: true }; return resumeGenerator(this, rval, "close"); } catch (e) { - if (!StarGeneratorObjectIsClosed(this)) + if (!GeneratorObjectIsClosed(this)) GeneratorSetClosed(this); throw e; } diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index 4c93da39ac0f..22bb37a1d949 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -2325,13 +2325,13 @@ TryAttachCallStub(JSContext* cx, ICCall_Fallback* stub, HandleScript script, jsb return true; } - if (fun->native() == intrinsic_IsSuspendedStarGenerator) { + if (fun->native() == intrinsic_IsSuspendedGenerator) { // This intrinsic only appears in self-hosted code. MOZ_ASSERT(op != JSOP_NEW); MOZ_ASSERT(argc == 1); - JitSpew(JitSpew_BaselineIC, " Generating Call_IsSuspendedStarGenerator stub"); + JitSpew(JitSpew_BaselineIC, " Generating Call_IsSuspendedGenerator stub"); - ICCall_IsSuspendedStarGenerator::Compiler compiler(cx); + ICCall_IsSuspendedGenerator::Compiler compiler(cx); ICStub* newStub = compiler.getStub(compiler.getStubSpace(script)); if (!newStub) return false; @@ -3431,13 +3431,13 @@ ICCall_ConstStringSplit::Compiler::generateStubCode(MacroAssembler& masm) } bool -ICCall_IsSuspendedStarGenerator::Compiler::generateStubCode(MacroAssembler& masm) +ICCall_IsSuspendedGenerator::Compiler::generateStubCode(MacroAssembler& masm) { MOZ_ASSERT(engine_ == Engine::Baseline); - // The IsSuspendedStarGenerator intrinsic is only called in self-hosted - // code, so it's safe to assume we have a single argument and the callee - // is our intrinsic. + // The IsSuspendedGenerator intrinsic is only called in self-hosted code, + // so it's safe to assume we have a single argument and the callee is our + // intrinsic. AllocatableGeneralRegisterSet regs(availableGeneralRegs(0)); diff --git a/js/src/jit/BaselineIC.h b/js/src/jit/BaselineIC.h index 92fb9dfcb720..9bf846ef9546 100644 --- a/js/src/jit/BaselineIC.h +++ b/js/src/jit/BaselineIC.h @@ -1298,13 +1298,13 @@ class ICCall_ConstStringSplit : public ICMonitoredStub }; }; -class ICCall_IsSuspendedStarGenerator : public ICStub +class ICCall_IsSuspendedGenerator : public ICStub { friend class ICStubSpace; protected: - explicit ICCall_IsSuspendedStarGenerator(JitCode* stubCode) - : ICStub(ICStub::Call_IsSuspendedStarGenerator, stubCode) + explicit ICCall_IsSuspendedGenerator(JitCode* stubCode) + : ICStub(ICStub::Call_IsSuspendedGenerator, stubCode) {} public: @@ -1314,10 +1314,10 @@ class ICCall_IsSuspendedStarGenerator : public ICStub public: explicit Compiler(JSContext* cx) - : ICStubCompiler(cx, ICStub::Call_IsSuspendedStarGenerator, Engine::Baseline) + : ICStubCompiler(cx, ICStub::Call_IsSuspendedGenerator, Engine::Baseline) {} ICStub* getStub(ICStubSpace* space) { - return newStub(space, getStubCode()); + return newStub(space, getStubCode()); } }; }; diff --git a/js/src/jit/BaselineICList.h b/js/src/jit/BaselineICList.h index 372657d71bbe..c6ff6556aefc 100644 --- a/js/src/jit/BaselineICList.h +++ b/js/src/jit/BaselineICList.h @@ -48,7 +48,7 @@ namespace jit { _(Call_ScriptedApplyArguments) \ _(Call_ScriptedFunCall) \ _(Call_ConstStringSplit) \ - _(Call_IsSuspendedStarGenerator) \ + _(Call_IsSuspendedGenerator) \ \ _(GetElem_Fallback) \ _(SetElem_Fallback) \ diff --git a/js/src/jscntxt.h b/js/src/jscntxt.h index 0a8e6f97a0dd..2e32f73fac62 100644 --- a/js/src/jscntxt.h +++ b/js/src/jscntxt.h @@ -1191,9 +1191,6 @@ class AutoAssertNoException } }; -/* Exposed intrinsics for the JITs. */ -bool intrinsic_IsSuspendedStarGenerator(JSContext* cx, unsigned argc, Value* vp); - class MOZ_RAII AutoLockForExclusiveAccess { JSRuntime* runtime; diff --git a/js/src/vm/AsyncFunction.cpp b/js/src/vm/AsyncFunction.cpp index 29422f34793f..3811704a1339 100644 --- a/js/src/vm/AsyncFunction.cpp +++ b/js/src/vm/AsyncFunction.cpp @@ -184,8 +184,8 @@ AsyncFunctionResume(JSContext* cx, Handle resultPromise, HandleV // Execution context switching is handled in generator. HandlePropertyName funName = kind == ResumeKind::Normal - ? cx->names().StarGeneratorNext - : cx->names().StarGeneratorThrow; + ? cx->names().GeneratorNext + : cx->names().GeneratorThrow; FixedInvokeArgs<1> args(cx); args[0].set(valueOrReason); RootedValue value(cx); diff --git a/js/src/vm/AsyncIteration.cpp b/js/src/vm/AsyncIteration.cpp index dc1450c5c3f2..546695f93749 100644 --- a/js/src/vm/AsyncIteration.cpp +++ b/js/src/vm/AsyncIteration.cpp @@ -465,10 +465,10 @@ js::AsyncGeneratorResume(JSContext* cx, Handle asyncGenOb // 11.4.3.5 steps 12-14, 16-20. HandlePropertyName funName = completionKind == CompletionKind::Normal - ? cx->names().StarGeneratorNext + ? cx->names().GeneratorNext : completionKind == CompletionKind::Throw - ? cx->names().StarGeneratorThrow - : cx->names().StarGeneratorReturn; + ? cx->names().GeneratorThrow + : cx->names().GeneratorReturn; FixedInvokeArgs<1> args(cx); args[0].set(argument); RootedValue result(cx); diff --git a/js/src/vm/CommonPropertyNames.h b/js/src/vm/CommonPropertyNames.h index 1cb365269bbc..9591c69f0749 100644 --- a/js/src/vm/CommonPropertyNames.h +++ b/js/src/vm/CommonPropertyNames.h @@ -155,6 +155,9 @@ macro(gcCycleNumber, gcCycleNumber, "gcCycleNumber") \ macro(Generator, Generator, "Generator") \ macro(GeneratorFunction, GeneratorFunction, "GeneratorFunction") \ + macro(GeneratorNext, GeneratorNext, "GeneratorNext") \ + macro(GeneratorReturn, GeneratorReturn, "GeneratorReturn") \ + macro(GeneratorThrow, GeneratorThrow, "GeneratorThrow") \ macro(get, get, "get") \ macro(getInternals, getInternals, "getInternals") \ macro(getOwnPropertyDescriptor, getOwnPropertyDescriptor, "getOwnPropertyDescriptor") \ @@ -374,9 +377,6 @@ macro(stack, stack, "stack") \ macro(star, star, "*") \ macro(starDefaultStar, starDefaultStar, "*default*") \ - macro(StarGeneratorNext, StarGeneratorNext, "StarGeneratorNext") \ - macro(StarGeneratorReturn, StarGeneratorReturn, "StarGeneratorReturn") \ - macro(StarGeneratorThrow, StarGeneratorThrow, "StarGeneratorThrow") \ macro(start, start, "start") \ macro(startTimestamp, startTimestamp, "startTimestamp") \ macro(state, state, "state") \ diff --git a/js/src/vm/GeneratorObject.cpp b/js/src/vm/GeneratorObject.cpp index ff6f8ac13ac4..7f23dbf0e896 100644 --- a/js/src/vm/GeneratorObject.cpp +++ b/js/src/vm/GeneratorObject.cpp @@ -189,9 +189,9 @@ const Class GeneratorObject::class_ = { }; static const JSFunctionSpec star_generator_methods[] = { - JS_SELF_HOSTED_FN("next", "StarGeneratorNext", 1, 0), - JS_SELF_HOSTED_FN("throw", "StarGeneratorThrow", 1, 0), - JS_SELF_HOSTED_FN("return", "StarGeneratorReturn", 1, 0), + JS_SELF_HOSTED_FN("next", "GeneratorNext", 1, 0), + JS_SELF_HOSTED_FN("throw", "GeneratorThrow", 1, 0), + JS_SELF_HOSTED_FN("return", "GeneratorReturn", 1, 0), JS_FS_END }; diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index abd2fc0cf6b4..07ca2d027794 100644 --- a/js/src/vm/SelfHosting.cpp +++ b/js/src/vm/SelfHosting.cpp @@ -834,7 +834,7 @@ intrinsic_SetCanonicalName(JSContext* cx, unsigned argc, Value* vp) } static bool -intrinsic_StarGeneratorObjectIsClosed(JSContext* cx, unsigned argc, Value* vp) +intrinsic_GeneratorObjectIsClosed(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); MOZ_ASSERT(args.length() == 1); @@ -846,7 +846,7 @@ intrinsic_StarGeneratorObjectIsClosed(JSContext* cx, unsigned argc, Value* vp) } bool -js::intrinsic_IsSuspendedStarGenerator(JSContext* cx, unsigned argc, Value* vp) +js::intrinsic_IsSuspendedGenerator(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); MOZ_ASSERT(args.length() == 1); @@ -2376,10 +2376,10 @@ static const JSFunctionSpec intrinsic_functions[] = { JS_FN("CallStringIteratorMethodIfWrapped", CallNonGenericSelfhostedMethod>, 2,0), - JS_FN("IsStarGeneratorObject", + JS_FN("IsGeneratorObject", intrinsic_IsInstanceOfBuiltin, 1,0), - JS_FN("StarGeneratorObjectIsClosed", intrinsic_StarGeneratorObjectIsClosed, 1,0), - JS_FN("IsSuspendedStarGenerator",intrinsic_IsSuspendedStarGenerator,1,0), + JS_FN("GeneratorObjectIsClosed", intrinsic_GeneratorObjectIsClosed, 1,0), + JS_FN("IsSuspendedGenerator", intrinsic_IsSuspendedGenerator, 1,0), JS_FN("GeneratorIsRunning", intrinsic_GeneratorIsRunning, 1,0), JS_FN("GeneratorSetClosed", intrinsic_GeneratorSetClosed, 1,0), @@ -2449,7 +2449,7 @@ static const JSFunctionSpec intrinsic_functions[] = { JS_FN("CallTypedArrayMethodIfWrapped", CallNonGenericSelfhostedMethod>, 2, 0), - JS_FN("CallStarGeneratorMethodIfWrapped", + JS_FN("CallGeneratorMethodIfWrapped", CallNonGenericSelfhostedMethod>, 2, 0), JS_INLINABLE_FN("IsMapObject", intrinsic_IsInstanceOfBuiltin, 1, 0, diff --git a/js/src/vm/SelfHosting.h b/js/src/vm/SelfHosting.h index ecb7f93ec64b..e6a73723c41c 100644 --- a/js/src/vm/SelfHosting.h +++ b/js/src/vm/SelfHosting.h @@ -53,6 +53,9 @@ intrinsic_NewArrayIterator(JSContext* cx, unsigned argc, JS::Value* vp); bool intrinsic_NewStringIterator(JSContext* cx, unsigned argc, JS::Value* vp); +bool +intrinsic_IsSuspendedGenerator(JSContext* cx, unsigned argc, JS::Value* vp); + } /* namespace js */ #endif /* vm_SelfHosting_h_ */ From 1bc9e8a5d9ab7d92fe0d33689def427abeb1f6ca Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Thu, 2 Nov 2017 14:39:08 +0100 Subject: [PATCH 11/33] Bug 1413900 - Remove unused JS capability macros. r=arai --- js/src/jsversion.h | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/js/src/jsversion.h b/js/src/jsversion.h index cf4c6e73a22a..b663aedbbd1e 100644 --- a/js/src/jsversion.h +++ b/js/src/jsversion.h @@ -10,26 +10,13 @@ /* * JS Capability Macros. */ -#define JS_HAS_STR_HTML_HELPERS 1 /* (no longer used) */ #define JS_HAS_OBJ_PROTO_PROP 1 /* has o.__proto__ etc. */ #define JS_HAS_TOSOURCE 1 /* has Object/Array toSource method */ #define JS_HAS_CATCH_GUARD 1 /* has exception handling catch guard */ #define JS_HAS_UNEVAL 1 /* has uneval() top-level function */ -#define JS_HAS_CONST 1 /* (no longer used) */ -#define JS_HAS_FUN_EXPR_STMT 1 /* (no longer used) */ #define JS_HAS_FOR_EACH_IN 1 /* has for each (lhs in iterable) */ -#define JS_HAS_GENERATORS 1 /* (no longer used) */ -#define JS_HAS_BLOCK_SCOPE 1 /* (no longer used) */ -#define JS_HAS_DESTRUCTURING 2 /* (no longer used) */ -#define JS_HAS_GENERATOR_EXPRS 1 /* (no longer used) */ #define JS_HAS_EXPR_CLOSURES 1 /* has function (formals) listexpr */ -/* (no longer used) */ -#define JS_HAS_NEW_GLOBAL_OBJECT 1 - -/* (no longer used) */ -#define JS_HAS_DESTRUCTURING_SHORTHAND (JS_HAS_DESTRUCTURING == 2) - /* * Feature for Object.prototype.__{define,lookup}{G,S}etter__ legacy support; * support likely to be made opt-in at some future time. From 4886cf372293febd070c37b820431a3f45c21af1 Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Thu, 2 Nov 2017 14:27:06 +0100 Subject: [PATCH 12/33] Bug 1412007 - HttpChannelChild::SendDivertComplete must always be executed after SendDivertOnStopRequest, r=mayhemer --- netwerk/protocol/http/HttpChannelChild.cpp | 46 ++++++++++++++++------ netwerk/protocol/http/HttpChannelChild.h | 34 ++++++++++++++-- 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/netwerk/protocol/http/HttpChannelChild.cpp b/netwerk/protocol/http/HttpChannelChild.cpp index 18b9fe2de1db..86de3d7925f4 100644 --- a/netwerk/protocol/http/HttpChannelChild.cpp +++ b/netwerk/protocol/http/HttpChannelChild.cpp @@ -173,7 +173,7 @@ HttpChannelChild::HttpChannelChild() , mKeptAlive(false) , mUnknownDecoderInvolved(false) , mDivertingToParent(false) - , mFlushedForDiversion(false) + , mFlushedForDiversion(eNotFlushed) , mSuspendSent(false) , mSynthesizedResponse(false) , mShouldInterceptSubsequentRedirect(false) @@ -493,7 +493,7 @@ HttpChannelChild::RecvOnStartRequest(const nsresult& channelStatus, LOG(("HttpChannelChild::RecvOnStartRequest [this=%p]\n", this)); // mFlushedForDiversion and mDivertingToParent should NEVER be set at this // stage, as they are set in the listener's OnStartRequest. - MOZ_RELEASE_ASSERT(!mFlushedForDiversion, + MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, "mFlushedForDiversion should be unset before OnStartRequest!"); MOZ_RELEASE_ASSERT(!mDivertingToParent, "mDivertingToParent should be unset before OnStartRequest!"); @@ -554,7 +554,7 @@ HttpChannelChild::OnStartRequest(const nsresult& channelStatus, // mFlushedForDiversion and mDivertingToParent should NEVER be set at this // stage, as they are set in the listener's OnStartRequest. - MOZ_RELEASE_ASSERT(!mFlushedForDiversion, + MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, "mFlushedForDiversion should be unset before OnStartRequest!"); MOZ_RELEASE_ASSERT(!mDivertingToParent, "mDivertingToParent should be unset before OnStartRequest!"); @@ -615,8 +615,6 @@ HttpChannelChild::OnStartRequest(const nsresult& channelStatus, DoOnStartRequest(this, mListenerContext); } -namespace { - class SyntheticDiversionListener final : public nsIStreamListener { RefPtr mChannel; @@ -644,6 +642,7 @@ public: nsresult aStatus) override { mChannel->SendDivertOnStopRequest(aStatus); + mChannel->MaybeSendDivertComplete(); return NS_OK; } @@ -668,8 +667,6 @@ public: NS_IMPL_ISUPPORTS(SyntheticDiversionListener, nsIStreamListener); -} // anonymous namespace - void HttpChannelChild::DoOnStartRequest(nsIRequest* aRequest, nsISupports* aContext) { @@ -769,7 +766,7 @@ HttpChannelChild::ProcessOnTransportAndData(const nsresult& aChannelStatus, { LOG(("HttpChannelChild::ProcessOnTransportAndData [this=%p]\n", this)); MOZ_ASSERT(OnSocketThread()); - MOZ_RELEASE_ASSERT(!mFlushedForDiversion, + MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, "Should not be receiving any more callbacks from parent!"); mEventQ->RunOrEnqueue(new TransportAndDataEvent(this, aChannelStatus, aTransportStatus, aData, @@ -828,7 +825,7 @@ HttpChannelChild::OnTransportAndData(const nsresult& channelStatus, // For diversion to parent, just SendDivertOnDataAvailable. if (mDivertingToParent) { MOZ_ASSERT(NS_IsMainThread()); - MOZ_RELEASE_ASSERT(!mFlushedForDiversion, + MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, "Should not be processing any more callbacks from parent!"); SendDivertOnDataAvailable(data, offset, count); @@ -997,7 +994,7 @@ HttpChannelChild::ProcessOnStopRequest(const nsresult& aChannelStatus, { LOG(("HttpChannelChild::ProcessOnStopRequest [this=%p]\n", this)); MOZ_ASSERT(OnSocketThread()); - MOZ_RELEASE_ASSERT(!mFlushedForDiversion, + MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, "Should not be receiving any more callbacks from parent!"); mEventQ->RunOrEnqueue(new StopRequestEvent(this, aChannelStatus, aTiming), @@ -1031,9 +1028,27 @@ HttpChannelChild::MaybeDivertOnStop(const nsresult& aChannelStatus) static_cast(aChannelStatus))); if (mDivertingToParent) { SendDivertOnStopRequest(aChannelStatus); + MaybeSendDivertComplete(); } } +void +HttpChannelChild::MaybeSendDivertComplete() +{ + if (mFlushedForDiversion == eNotFlushed) { + mFlushedForDiversion = eReadyToBeFlushed; + return; + } + + if (mFlushedForDiversion == ePendingToBeFlushed) { + mFlushedForDiversion = eFlushed; + SendDivertComplete(); + return; + } + + MOZ_CRASH("We should not be already in this state!"); +} + void HttpChannelChild::OnStopRequest(const nsresult& channelStatus, const ResourceTimingStruct& timing) @@ -1043,10 +1058,11 @@ HttpChannelChild::OnStopRequest(const nsresult& channelStatus, MOZ_ASSERT(NS_IsMainThread()); if (mDivertingToParent) { - MOZ_RELEASE_ASSERT(!mFlushedForDiversion, + MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, "Should not be processing any more callbacks from parent!"); SendDivertOnStopRequest(channelStatus); + MaybeSendDivertComplete(); return; } @@ -1846,9 +1862,13 @@ HttpChannelChild::FlushedForDiversion() // Once this is set, it should not be unset before HttpChannelChild is taken // down. After it is set, no OnStart/OnData/OnStop callbacks should be // received from the parent channel, nor dequeued from the ChannelEventQueue. - mFlushedForDiversion = true; - SendDivertComplete(); + if (mFlushedForDiversion == eReadyToBeFlushed) { + mFlushedForDiversion = eFlushed; + SendDivertComplete(); + } else { + mFlushedForDiversion = ePendingToBeFlushed; + } } void diff --git a/netwerk/protocol/http/HttpChannelChild.h b/netwerk/protocol/http/HttpChannelChild.h index d83aa244eb1f..ee8de0b2ea1a 100644 --- a/netwerk/protocol/http/HttpChannelChild.h +++ b/netwerk/protocol/http/HttpChannelChild.h @@ -319,9 +319,31 @@ private: // Once set, OnData and possibly OnStop will be diverted to the parent. Atomic mDivertingToParent; - // Once set, no OnStart/OnData/OnStop callbacks should be received from the - // parent channel, nor dequeued from the ChannelEventQueue. - Atomic mFlushedForDiversion; + + enum FlushedForDiversionEnum { + // This is the initial state. + eNotFlushed, + + // This is set when SendOnStopRequest() is called and the previous state was + // eNotFlushed. FlushedForDiversion() has not been called yet, but when, + // eventually, it will be, SendDivertComplete() can immediately called. + eReadyToBeFlushed, + + // This is set by FlushedForDiversion() when SetOnStopRequest() has not been + // called yet. When finally SetOnStopRequest() will be called, + // SendDivertComplete() will be executed as well. + ePendingToBeFlushed, + + // This is the final step. No OnStart/OnData/OnStop callbacks should be + // received from the parent channel, nor dequeued from the + // ChannelEventQueue. + eFlushed, + }; + + // Atomic becuase it can be touched onSocketThread() for debugging reasons + // only. + Atomic mFlushedForDiversion; + // Set if SendSuspend is called. Determines if SendResume is needed when // diverting callbacks to parent. bool mSuspendSent; @@ -440,6 +462,11 @@ private: // Collect telemetry for the successful rate of OMT. void CollectOMTTelemetry(); + // When SendDivertOnStopRequest() is called, this method is used to check + // mFlushedForDiversion and maybe call SendDivertComplete(). See + // mFlushedForDiversion state. + void MaybeSendDivertComplete(); + // The result of RetargetDeliveryTo for this channel. // |notRequested| represents OMT is not requested by the channel owner. LABELS_HTTP_CHILD_OMT_STATS mOMTResult = LABELS_HTTP_CHILD_OMT_STATS::notRequested; @@ -452,6 +479,7 @@ private: friend class MaybeDivertOnStopHttpEvent; friend class ProgressEvent; friend class StatusEvent; + friend class SyntheticDiversionListener; friend class FailedAsyncOpenEvent; friend class Redirect1Event; friend class Redirect3Event; From f32b54341586ea8d6f43b3ae2ef42e6f9180b3dd Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Thu, 2 Nov 2017 09:46:30 -0400 Subject: [PATCH 13/33] Bug 1412555 - Update canvas position on scroll in the css grid highlighter. r=pbro --- .../server/actors/highlighters/css-grid.js | 12 +- .../server/actors/highlighters/flexbox.js | 12 +- .../actors/highlighters/utils/canvas.js | 146 +++++++++--------- 3 files changed, 82 insertions(+), 88 deletions(-) diff --git a/devtools/server/actors/highlighters/css-grid.js b/devtools/server/actors/highlighters/css-grid.js index 77c7d934084f..75009a791c3d 100644 --- a/devtools/server/actors/highlighters/css-grid.js +++ b/devtools/server/actors/highlighters/css-grid.js @@ -13,11 +13,11 @@ const { drawRect, drawRoundedRect, getBoundsFromPoints, - getCanvasPosition, getCurrentMatrix, getPathDescriptionFromPoints, getPointsFromDiagonal, updateCanvasElement, + updateCanvasPosition, } = require("./utils/canvas"); const { CanvasFrameAnonymousContentHelper, @@ -176,12 +176,10 @@ class CssGridHighlighter extends AutoRefreshHighlighter { y: 0 }; - // Calling `getCanvasPosition` anyway since the highlighter could be initialized + // Calling `updateCanvasPosition` anyway since the highlighter could be initialized // on a page that has scrolled already. - let { canvasX, canvasY } = getCanvasPosition(this._canvasPosition, this._scroll, - this.win, this._winDimensions); - this._canvasPosition.x = canvasX; - this._canvasPosition.y = canvasY; + updateCanvasPosition(this._canvasPosition, this._scroll, this.win, + this._winDimensions); } _buildMarkup() { @@ -772,7 +770,7 @@ class CssGridHighlighter extends AutoRefreshHighlighter { * to give the illusion that it always covers the viewport. */ _scrollUpdate() { - let { hasUpdated } = getCanvasPosition(this._canvasPosition, this._scroll, this.win, + let hasUpdated = updateCanvasPosition(this._canvasPosition, this._scroll, this.win, this._winDimensions); if (hasUpdated) { diff --git a/devtools/server/actors/highlighters/flexbox.js b/devtools/server/actors/highlighters/flexbox.js index d00753ae2582..c783c911b29e 100644 --- a/devtools/server/actors/highlighters/flexbox.js +++ b/devtools/server/actors/highlighters/flexbox.js @@ -7,9 +7,9 @@ const { AutoRefreshHighlighter } = require("./auto-refresh"); const { CANVAS_SIZE, - getCanvasPosition, getCurrentMatrix, updateCanvasElement, + updateCanvasPosition, } = require("./utils/canvas"); const { CanvasFrameAnonymousContentHelper, @@ -42,12 +42,10 @@ class FlexboxHighlighter extends AutoRefreshHighlighter { y: 0 }; - // Calling `getCanvasPosition` anyway since the highlighter could be initialized + // Calling `updateCanvasPosition` anyway since the highlighter could be initialized // on a page that has scrolled already. - let { canvasX, canvasY } = getCanvasPosition(this._canvasPosition, this._scroll, - this.win, this._winDimensions); - this._canvasPosition.x = canvasX; - this._canvasPosition.y = canvasY; + updateCanvasPosition(this._canvasPosition, this._scroll, this.win, + this._winDimensions); } _buildMarkup() { @@ -126,7 +124,7 @@ class FlexboxHighlighter extends AutoRefreshHighlighter { * to give the illusion that it always covers the viewport. */ _scrollUpdate() { - let { hasUpdated } = getCanvasPosition(this._canvasPosition, this._scroll, this.win, + let hasUpdated = updateCanvasPosition(this._canvasPosition, this._scroll, this.win, this._winDimensions); if (hasUpdated) { diff --git a/devtools/server/actors/highlighters/utils/canvas.js b/devtools/server/actors/highlighters/utils/canvas.js index 388f4a523b83..599cc6203f13 100644 --- a/devtools/server/actors/highlighters/utils/canvas.js +++ b/devtools/server/actors/highlighters/utils/canvas.js @@ -228,79 +228,6 @@ function getBoundsFromPoints(points) { return bounds; } -/** - * Calculates and returns the 's position in accordance with the page's scroll, - * document's size, canvas size, and viewport's size. This is called when a page's scroll - * is detected. - * - * @param {Object} canvasPosition - * A pointer object {x, y} representing the position to the top left - * corner of the page. - * @param {Object} scrollPosition - * A pointer object {x, y} representing the window's pageXOffset and pageYOffset. - * @param {Window} window - * The window object. - * @param {Object} windowDimensions - * An object {width, height} representing the window's dimensions for the - * `window` given. - * @return {Object} An object with the following properties: - * - {Boolean} hasUpdated - * true if the position was updated and false otherwise. - * - {Number} canvasX - * The canvas' x position. - * - {Number} canvasY - * The canvas' y position. - */ -function getCanvasPosition(canvasPosition, scrollPosition, window, windowDimensions) { - let { x: canvasX, y: canvasY } = canvasPosition; - let { x: scrollX, y: scrollY } = scrollPosition; - let cssCanvasSize = CANVAS_SIZE / window.devicePixelRatio; - let viewportSize = getViewportDimensions(window); - let { height, width } = windowDimensions; - let canvasWidth = cssCanvasSize; - let canvasHeight = cssCanvasSize; - let hasUpdated = false; - - // Those values indicates the relative horizontal and vertical space the page can - // scroll before we have to reposition the ; they're 1/4 of the delta between - // the canvas' size and the viewport's size: that's because we want to consider both - // sides (top/bottom, left/right; so 1/2 for each side) and also we don't want to - // shown the edges of the canvas in case of fast scrolling (to avoid showing undraw - // areas, therefore another 1/2 here). - let bufferSizeX = (canvasWidth - viewportSize.width) >> 2; - let bufferSizeY = (canvasHeight - viewportSize.height) >> 2; - - // Defines the boundaries for the canvas. - let leftBoundary = 0; - let rightBoundary = width - canvasWidth; - let topBoundary = 0; - let bottomBoundary = height - canvasHeight; - - // Defines the thresholds that triggers the canvas' position to be updated. - let leftThreshold = scrollX - bufferSizeX; - let rightThreshold = scrollX - canvasWidth + viewportSize.width + bufferSizeX; - let topThreshold = scrollY - bufferSizeY; - let bottomThreshold = scrollY - canvasHeight + viewportSize.height + bufferSizeY; - - if (canvasX < rightBoundary && canvasX < rightThreshold) { - canvasX = Math.min(leftThreshold, rightBoundary); - hasUpdated = true; - } else if (canvasX > leftBoundary && canvasX > leftThreshold) { - canvasX = Math.max(rightThreshold, leftBoundary); - hasUpdated = true; - } - - if (canvasY < bottomBoundary && canvasY < bottomThreshold) { - canvasY = Math.min(topThreshold, bottomBoundary); - hasUpdated = true; - } else if (canvasY > topBoundary && canvasY > topThreshold) { - canvasY = Math.max(bottomThreshold, topBoundary); - hasUpdated = true; - } - - return { canvasX, canvasY, hasUpdated }; -} - /** * Returns the current matrices for both canvas drawing and SVG taking into account the * following transformations, in this order: @@ -427,14 +354,85 @@ function updateCanvasElement(canvas, canvasPosition, devicePixelRatio) { canvas.getCanvasContext("2d").clearRect(0, 0, CANVAS_SIZE, CANVAS_SIZE); } +/** + * Calculates and returns the 's position in accordance with the page's scroll, + * document's size, canvas size, and viewport's size. This is called when a page's scroll + * is detected. + * + * @param {Object} canvasPosition + * A pointer object {x, y} representing the position to the top left + * corner of the page. + * @param {Object} scrollPosition + * A pointer object {x, y} representing the window's pageXOffset and pageYOffset. + * @param {Window} window + * The window object. + * @param {Object} windowDimensions + * An object {width, height} representing the window's dimensions for the + * `window` given. + * @return {Boolean} true if the position was updated and false otherwise. + */ +function updateCanvasPosition(canvasPosition, scrollPosition, window, windowDimensions) { + let { x: canvasX, y: canvasY } = canvasPosition; + let { x: scrollX, y: scrollY } = scrollPosition; + let cssCanvasSize = CANVAS_SIZE / window.devicePixelRatio; + let viewportSize = getViewportDimensions(window); + let { height, width } = windowDimensions; + let canvasWidth = cssCanvasSize; + let canvasHeight = cssCanvasSize; + let hasUpdated = false; + + // Those values indicates the relative horizontal and vertical space the page can + // scroll before we have to reposition the ; they're 1/4 of the delta between + // the canvas' size and the viewport's size: that's because we want to consider both + // sides (top/bottom, left/right; so 1/2 for each side) and also we don't want to + // shown the edges of the canvas in case of fast scrolling (to avoid showing undraw + // areas, therefore another 1/2 here). + let bufferSizeX = (canvasWidth - viewportSize.width) >> 2; + let bufferSizeY = (canvasHeight - viewportSize.height) >> 2; + + // Defines the boundaries for the canvas. + let leftBoundary = 0; + let rightBoundary = width - canvasWidth; + let topBoundary = 0; + let bottomBoundary = height - canvasHeight; + + // Defines the thresholds that triggers the canvas' position to be updated. + let leftThreshold = scrollX - bufferSizeX; + let rightThreshold = scrollX - canvasWidth + viewportSize.width + bufferSizeX; + let topThreshold = scrollY - bufferSizeY; + let bottomThreshold = scrollY - canvasHeight + viewportSize.height + bufferSizeY; + + if (canvasX < rightBoundary && canvasX < rightThreshold) { + canvasX = Math.min(leftThreshold, rightBoundary); + hasUpdated = true; + } else if (canvasX > leftBoundary && canvasX > leftThreshold) { + canvasX = Math.max(rightThreshold, leftBoundary); + hasUpdated = true; + } + + if (canvasY < bottomBoundary && canvasY < bottomThreshold) { + canvasY = Math.min(topThreshold, bottomBoundary); + hasUpdated = true; + } else if (canvasY > topBoundary && canvasY > topThreshold) { + canvasY = Math.max(bottomThreshold, topBoundary); + hasUpdated = true; + } + + // Update the canvas position with the calculated canvasX and canvasY positions. + canvasPosition.x = canvasX; + canvasPosition.y = canvasY; + + return hasUpdated; +} + exports.CANVAS_SIZE = CANVAS_SIZE; exports.drawBubbleRect = drawBubbleRect; exports.drawLine = drawLine; exports.drawRect = drawRect; exports.drawRoundedRect = drawRoundedRect; exports.getBoundsFromPoints = getBoundsFromPoints; -exports.getCanvasPosition = getCanvasPosition; exports.getCurrentMatrix = getCurrentMatrix; exports.getPathDescriptionFromPoints = getPathDescriptionFromPoints; exports.getPointsFromDiagonal = getPointsFromDiagonal; exports.updateCanvasElement = updateCanvasElement; +exports.updateCanvasPosition = updateCanvasPosition; From 3f87bfc46de9d068eb38302d2d267fc0e89df815 Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 15:36:18 +0100 Subject: [PATCH 14/33] Bug 1083482 part 8 - Clean up more generator code. r=arai --- js/src/builtin/ModuleObject.cpp | 5 +- js/src/builtin/Object.cpp | 2 +- js/src/builtin/ReflectParse.cpp | 2 +- js/src/frontend/BytecodeCompiler.cpp | 12 ++- js/src/frontend/BytecodeEmitter.cpp | 24 ++--- js/src/frontend/BytecodeEmitter.h | 2 +- js/src/frontend/ParseContext.h | 16 ++- js/src/frontend/Parser.cpp | 147 +++++++++++++-------------- js/src/frontend/Parser.h | 4 +- js/src/frontend/SharedContext.h | 24 ++--- js/src/jit/Ion.cpp | 4 +- js/src/jit/IonAnalysis.cpp | 2 +- js/src/jsfun.cpp | 44 ++++---- js/src/jsfun.h | 8 +- js/src/jsscript.cpp | 18 ++-- js/src/jsscript.h | 34 ++++--- js/src/vm/Debugger.cpp | 8 +- js/src/vm/EnvironmentObject.cpp | 8 +- js/src/vm/GeneratorObject.cpp | 4 +- js/src/vm/ObjectGroup.cpp | 2 +- js/src/vm/Probes-inl.h | 2 +- js/src/vm/SelfHosting.cpp | 2 +- js/src/vm/Stack-inl.h | 2 +- js/src/vm/Stack.cpp | 2 +- js/src/vm/Stack.h | 2 +- js/src/wasm/AsmJS.cpp | 4 +- 26 files changed, 193 insertions(+), 191 deletions(-) diff --git a/js/src/builtin/ModuleObject.cpp b/js/src/builtin/ModuleObject.cpp index 07ef2bf60309..647e547e8526 100644 --- a/js/src/builtin/ModuleObject.cpp +++ b/js/src/builtin/ModuleObject.cpp @@ -1071,11 +1071,10 @@ ModuleObject::instantiateFunctionDeclarations(JSContext* cx, HandleModuleObject return false; if (fun->isAsync()) { - if (fun->isStarGenerator()) { + if (fun->isGenerator()) obj = WrapAsyncGenerator(cx, obj.as()); - } else { + else obj = WrapAsyncFunction(cx, obj.as()); - } } if (!obj) diff --git a/js/src/builtin/Object.cpp b/js/src/builtin/Object.cpp index 0d8f5641ecbb..b0cba6dbf1a6 100644 --- a/js/src/builtin/Object.cpp +++ b/js/src/builtin/Object.cpp @@ -355,7 +355,7 @@ js::ObjectToSource(JSContext* cx, HandleObject obj) return false; } - if (fun->isStarGenerator()) { + if (fun->isGenerator()) { if (!buf.append('*')) return false; } diff --git a/js/src/builtin/ReflectParse.cpp b/js/src/builtin/ReflectParse.cpp index fc7e97706096..93b72d7f8baa 100644 --- a/js/src/builtin/ReflectParse.cpp +++ b/js/src/builtin/ReflectParse.cpp @@ -3427,7 +3427,7 @@ ASTSerializer::function(ParseNode* pn, ASTType type, MutableHandleValue dst) RootedFunction func(cx, pn->pn_funbox->function()); GeneratorStyle generatorStyle = - pn->pn_funbox->isStarGenerator() + pn->pn_funbox->isGenerator() ? GeneratorStyle::ES6 : GeneratorStyle::None; diff --git a/js/src/frontend/BytecodeCompiler.cpp b/js/src/frontend/BytecodeCompiler.cpp index 3c8bb6b32bfa..5c92a6b0d6c3 100644 --- a/js/src/frontend/BytecodeCompiler.cpp +++ b/js/src/frontend/BytecodeCompiler.cpp @@ -730,7 +730,8 @@ frontend::CompileStandaloneFunction(JSContext* cx, MutableHandleFunction fun, scope = &cx->global()->emptyGlobalScope(); BytecodeCompiler compiler(cx, cx->tempLifoAlloc(), options, srcBuf, scope); - return compiler.compileStandaloneFunction(fun, NotGenerator, SyncFunction, parameterListEnd); + return compiler.compileStandaloneFunction(fun, GeneratorKind::NotGenerator, SyncFunction, + parameterListEnd); } bool @@ -742,7 +743,8 @@ frontend::CompileStandaloneGenerator(JSContext* cx, MutableHandleFunction fun, RootedScope emptyGlobalScope(cx, &cx->global()->emptyGlobalScope()); BytecodeCompiler compiler(cx, cx->tempLifoAlloc(), options, srcBuf, emptyGlobalScope); - return compiler.compileStandaloneFunction(fun, StarGenerator, SyncFunction, parameterListEnd); + return compiler.compileStandaloneFunction(fun, GeneratorKind::Generator, SyncFunction, + parameterListEnd); } bool @@ -754,7 +756,8 @@ frontend::CompileStandaloneAsyncFunction(JSContext* cx, MutableHandleFunction fu RootedScope emptyGlobalScope(cx, &cx->global()->emptyGlobalScope()); BytecodeCompiler compiler(cx, cx->tempLifoAlloc(), options, srcBuf, emptyGlobalScope); - return compiler.compileStandaloneFunction(fun, NotGenerator, AsyncFunction, parameterListEnd); + return compiler.compileStandaloneFunction(fun, GeneratorKind::NotGenerator, AsyncFunction, + parameterListEnd); } bool @@ -766,5 +769,6 @@ frontend::CompileStandaloneAsyncGenerator(JSContext* cx, MutableHandleFunction f RootedScope emptyGlobalScope(cx, &cx->global()->emptyGlobalScope()); BytecodeCompiler compiler(cx, cx->tempLifoAlloc(), options, srcBuf, emptyGlobalScope); - return compiler.compileStandaloneFunction(fun, StarGenerator, AsyncFunction, parameterListEnd); + return compiler.compileStandaloneFunction(fun, GeneratorKind::Generator, AsyncFunction, + parameterListEnd); } diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp index 5c8aae058673..fab01d1d5975 100644 --- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -399,7 +399,7 @@ class BytecodeEmitter::EmitterScope : public Nestable bce->maxFixedSlots) bce->maxFixedSlots = nextFrameSlot_; MOZ_ASSERT_IF(bce->sc->isFunctionBox() && - (bce->sc->asFunctionBox()->isStarGenerator() || + (bce->sc->asFunctionBox()->isGenerator() || bce->sc->asFunctionBox()->isAsync()), bce->maxFixedSlots == 0); } @@ -4831,7 +4831,7 @@ BytecodeEmitter::isRunOnceLambda() FunctionBox* funbox = sc->asFunctionBox(); return !funbox->argumentsHasLocalBinding() && - !funbox->isStarGenerator() && + !funbox->isGenerator() && !funbox->isAsync() && !funbox->function()->explicitName(); } @@ -8239,7 +8239,7 @@ BytecodeEmitter::emitFunction(ParseNode* pn, bool needsProto) if (funbox->isAsync()) { MOZ_ASSERT(!needsProto); return emitAsyncWrapper(index, funbox->needsHomeObject(), fun->isArrow(), - fun->isStarGenerator()); + fun->isGenerator()); } if (fun->isArrow()) { @@ -8295,7 +8295,7 @@ BytecodeEmitter::emitFunction(ParseNode* pn, bool needsProto) switchToPrologue(); if (funbox->isAsync()) { if (!emitAsyncWrapper(index, fun->isMethod(), fun->isArrow(), - fun->isStarGenerator())) + fun->isGenerator())) { return false; } @@ -8314,12 +8314,12 @@ BytecodeEmitter::emitFunction(ParseNode* pn, bool needsProto) // initialize the binding name of the function in the current scope. bool isAsync = funbox->isAsync(); - bool isStarGenerator = funbox->isStarGenerator(); - auto emitLambda = [index, isAsync, isStarGenerator](BytecodeEmitter* bce, - const NameLocation&, bool) { + bool isGenerator = funbox->isGenerator(); + auto emitLambda = [index, isAsync, isGenerator](BytecodeEmitter* bce, + const NameLocation&, bool) { if (isAsync) { return bce->emitAsyncWrapper(index, /* needsHomeObject = */ false, - /* isArrow = */ false, isStarGenerator); + /* isArrow = */ false, isGenerator); } return bce->emitIndexOp(JSOP_LAMBDA, index); }; @@ -8355,7 +8355,7 @@ BytecodeEmitter::emitAsyncWrapperLambda(unsigned index, bool isArrow) { bool BytecodeEmitter::emitAsyncWrapper(unsigned index, bool needsHomeObject, bool isArrow, - bool isStarGenerator) + bool isGenerator) { // needsHomeObject can be true for propertyList for extended class. // In that case push both unwrapped and wrapped function, in order to @@ -8387,7 +8387,7 @@ BytecodeEmitter::emitAsyncWrapper(unsigned index, bool needsHomeObject, bool isA if (!emit1(JSOP_DUP)) return false; } - if (isStarGenerator) { + if (isGenerator) { if (!emit1(JSOP_TOASYNCGEN)) return false; } else { @@ -8641,7 +8641,7 @@ BytecodeEmitter::emitReturn(ParseNode* pn) return false; bool isAsyncGenerator = sc->asFunctionBox()->isAsync() && - sc->asFunctionBox()->isStarGenerator(); + sc->asFunctionBox()->isGenerator(); if (isAsyncGenerator) { if (!emitAwait()) return false; @@ -8805,7 +8805,7 @@ bool BytecodeEmitter::emitYieldStar(ParseNode* iter) { MOZ_ASSERT(sc->isFunctionBox()); - MOZ_ASSERT(sc->asFunctionBox()->isStarGenerator()); + MOZ_ASSERT(sc->asFunctionBox()->isGenerator()); bool isAsyncGenerator = sc->asFunctionBox()->isAsync(); diff --git a/js/src/frontend/BytecodeEmitter.h b/js/src/frontend/BytecodeEmitter.h index 913476db4928..56e123c2ead1 100644 --- a/js/src/frontend/BytecodeEmitter.h +++ b/js/src/frontend/BytecodeEmitter.h @@ -650,7 +650,7 @@ struct MOZ_STACK_CLASS BytecodeEmitter MOZ_MUST_USE bool emitAsyncWrapperLambda(unsigned index, bool isArrow); MOZ_MUST_USE bool emitAsyncWrapper(unsigned index, bool needsHomeObject, bool isArrow, - bool isStarGenerator); + bool isGenerator); MOZ_MUST_USE bool emitComputedPropertyName(ParseNode* computedPropName); diff --git a/js/src/frontend/ParseContext.h b/js/src/frontend/ParseContext.h index 6db11e775a94..cd293d1b98e2 100644 --- a/js/src/frontend/ParseContext.h +++ b/js/src/frontend/ParseContext.h @@ -1,3 +1,9 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: set ts=8 sts=4 et sw=4 tw=99: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + #ifndef frontend_ParseContext_h #define frontend_ParseContext_h @@ -622,11 +628,13 @@ class ParseContext : public Nestable // An ES6 generator is marked as a "star generator" before its body is parsed. GeneratorKind generatorKind() const { - return sc_->isFunctionBox() ? sc_->asFunctionBox()->generatorKind() : NotGenerator; + return sc_->isFunctionBox() + ? sc_->asFunctionBox()->generatorKind() + : GeneratorKind::NotGenerator; } - bool isStarGenerator() const { - return generatorKind() == StarGenerator; + bool isGenerator() const { + return generatorKind() == GeneratorKind::Generator; } bool isAsync() const { @@ -634,7 +642,7 @@ class ParseContext : public Nestable } bool needsDotGeneratorName() const { - return isStarGenerator() || isAsync(); + return isGenerator() || isAsync(); } FunctionAsyncKind asyncKind() const { diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 31f331c38168..19e6177e2a6b 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -466,7 +466,7 @@ FunctionBox::FunctionBox(JSContext* cx, LifoAlloc& alloc, ObjectBox* traceListHe toStringStart(toStringStart), toStringEnd(0), length(0), - generatorKindBits_(GeneratorKindAsBits(generatorKind)), + generatorKind_(GeneratorKindAsBit(generatorKind)), asyncKindBits_(AsyncKindAsBits(asyncKind)), isGenexpLambda(false), hasDestructuringArgs(false), @@ -2515,7 +2515,7 @@ Parser::finishFunction(bool isStandaloneFunction / static YieldHandling GetYieldHandling(GeneratorKind generatorKind) { - if (generatorKind == NotGenerator) + if (generatorKind == GeneratorKind::NotGenerator) return YieldIsName; return YieldIsKeyword; } @@ -2553,7 +2553,7 @@ Parser::standaloneFunction(HandleFunction fun, if (!tokenStream.getToken(&tt)) return null(); - if (generatorKind == StarGenerator) { + if (generatorKind == GeneratorKind::Generator) { MOZ_ASSERT(tt == TOK_MUL); if (!tokenStream.getToken(&tt)) return null(); @@ -2745,11 +2745,11 @@ Parser::functionBody(InHandling inHandling, YieldHandling y } switch (pc->generatorKind()) { - case NotGenerator: + case GeneratorKind::NotGenerator: MOZ_ASSERT_IF(!pc->isAsync(), pc->lastYieldOffset == startYieldOffset); break; - case StarGenerator: + case GeneratorKind::Generator: MOZ_ASSERT(kind != Arrow); MOZ_ASSERT(type == StatementListBody); break; @@ -2795,7 +2795,7 @@ ParserBase::newFunction(HandleAtom atom, FunctionSyntaxKind kind, #endif switch (kind) { case Expression: - flags = (generatorKind == NotGenerator && asyncKind == SyncFunction + flags = (generatorKind == GeneratorKind::NotGenerator && asyncKind == SyncFunction ? JSFunction::INTERPRETED_LAMBDA : JSFunction::INTERPRETED_LAMBDA_GENERATOR_OR_ASYNC); break; @@ -2804,8 +2804,7 @@ ParserBase::newFunction(HandleAtom atom, FunctionSyntaxKind kind, allocKind = gc::AllocKind::FUNCTION_EXTENDED; break; case Method: - MOZ_ASSERT(generatorKind == NotGenerator || generatorKind == StarGenerator); - flags = (generatorKind == NotGenerator && asyncKind == SyncFunction + flags = (generatorKind == GeneratorKind::NotGenerator && asyncKind == SyncFunction ? JSFunction::INTERPRETED_METHOD : JSFunction::INTERPRETED_METHOD_GENERATOR_OR_ASYNC); allocKind = gc::AllocKind::FUNCTION_EXTENDED; @@ -2833,7 +2832,7 @@ ParserBase::newFunction(HandleAtom atom, FunctionSyntaxKind kind, allocKind = gc::AllocKind::FUNCTION_EXTENDED; } #endif - flags = (generatorKind == NotGenerator && asyncKind == SyncFunction + flags = (generatorKind == GeneratorKind::NotGenerator && asyncKind == SyncFunction ? JSFunction::INTERPRETED_NORMAL : JSFunction::INTERPRETED_GENERATOR_OR_ASYNC); } @@ -3362,7 +3361,7 @@ Parser::functionDefinition(Node pn, uint32_t toStringStart, } RootedObject proto(context); - if (generatorKind == StarGenerator || asyncKind == AsyncFunction) { + if (generatorKind == GeneratorKind::Generator || asyncKind == AsyncFunction) { // If we are off thread, the generator meta-objects have // already been created by js::StartOffThreadParseTask, so cx will not // be necessary. @@ -3434,8 +3433,12 @@ Parser::trySyntaxParseInnerFunction(ParseNode* pn, H // parse to avoid the overhead of a lazy syntax-only parse. Although // the prediction may be incorrect, IIFEs are common enough that it // pays off for lots of code. - if (pn->isLikelyIIFE() && generatorKind == NotGenerator && asyncKind == SyncFunction) + if (pn->isLikelyIIFE() && + generatorKind == GeneratorKind::NotGenerator && + asyncKind == SyncFunction) + { break; + } if (!syntaxParser_) break; @@ -3712,7 +3715,7 @@ Parser::functionFormalParametersAndBody(InHandling inHandli uint32_t openedPos = 0; if (tt != TOK_LC) { if (kind != Arrow) { - if (funbox->isStarGenerator() || funbox->isAsync() || kind == Method || + if (funbox->isGenerator() || funbox->isAsync() || kind == Method || kind == GetterNoExpressionClosure || kind == SetterNoExpressionClosure || IsConstructorKind(kind)) { @@ -3841,9 +3844,9 @@ Parser::functionStmt(uint32_t toStringStart, YieldHandling if (!tokenStream.getToken(&tt)) return null(); - GeneratorKind generatorKind = NotGenerator; + GeneratorKind generatorKind = GeneratorKind::NotGenerator; if (tt == TOK_MUL) { - generatorKind = StarGenerator; + generatorKind = GeneratorKind::Generator; if (!tokenStream.getToken(&tt)) return null(); } @@ -3868,9 +3871,11 @@ Parser::functionStmt(uint32_t toStringStart, YieldHandling MOZ_ASSERT(declaredInStmt->kind() != StatementKind::Label); MOZ_ASSERT(StatementKindIsBraced(declaredInStmt->kind())); - kind = !pc->sc()->strict() && generatorKind == NotGenerator && asyncKind == SyncFunction - ? DeclarationKind::SloppyLexicalFunction - : DeclarationKind::LexicalFunction; + kind = (!pc->sc()->strict() && + generatorKind == GeneratorKind::NotGenerator && + asyncKind == SyncFunction) + ? DeclarationKind::SloppyLexicalFunction + : DeclarationKind::LexicalFunction; } else { kind = pc->atModuleLevel() ? DeclarationKind::ModuleBodyLevelFunction @@ -3906,13 +3911,13 @@ Parser::functionExpr(uint32_t toStringStart, InvokedPredict MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_FUNCTION)); AutoAwaitIsKeyword awaitIsKeyword(this, GetAwaitHandling(asyncKind)); - GeneratorKind generatorKind = NotGenerator; + GeneratorKind generatorKind = GeneratorKind::NotGenerator; TokenKind tt; if (!tokenStream.getToken(&tt)) return null(); if (tt == TOK_MUL) { - generatorKind = StarGenerator; + generatorKind = GeneratorKind::Generator; if (!tokenStream.getToken(&tt)) return null(); } @@ -6581,56 +6586,48 @@ Parser::yieldExpression(InHandling inHandling) MOZ_ASSERT(tokenStream.isCurrentTokenType(TOK_YIELD)); uint32_t begin = pos().begin; - switch (pc->generatorKind()) { - case StarGenerator: - { - MOZ_ASSERT(pc->isFunctionBox()); + MOZ_ASSERT(pc->isGenerator()); + MOZ_ASSERT(pc->isFunctionBox()); - pc->lastYieldOffset = begin; + pc->lastYieldOffset = begin; - Node exprNode; - ParseNodeKind kind = PNK_YIELD; - TokenKind tt = TOK_EOF; - if (!tokenStream.peekTokenSameLine(&tt, TokenStream::Operand)) - return null(); - switch (tt) { - // TOK_EOL is special; it implements the [no LineTerminator here] - // quirk in the grammar. - case TOK_EOL: - // The rest of these make up the complete set of tokens that can - // appear after any of the places where AssignmentExpression is used - // throughout the grammar. Conveniently, none of them can also be the - // start an expression. - case TOK_EOF: - case TOK_SEMI: - case TOK_RC: - case TOK_RB: - case TOK_RP: - case TOK_COLON: - case TOK_COMMA: - case TOK_IN: - // No value. - exprNode = null(); - tokenStream.addModifierException(TokenStream::NoneIsOperand); - break; - case TOK_MUL: - kind = PNK_YIELD_STAR; - tokenStream.consumeKnownToken(TOK_MUL, TokenStream::Operand); - MOZ_FALLTHROUGH; - default: - exprNode = assignExpr(inHandling, YieldIsKeyword, TripledotProhibited); - if (!exprNode) - return null(); - } - if (kind == PNK_YIELD_STAR) - return handler.newYieldStarExpression(begin, exprNode); - return handler.newYieldExpression(begin, exprNode); - } - case NotGenerator: + Node exprNode; + ParseNodeKind kind = PNK_YIELD; + TokenKind tt = TOK_EOF; + if (!tokenStream.peekTokenSameLine(&tt, TokenStream::Operand)) + return null(); + switch (tt) { + // TOK_EOL is special; it implements the [no LineTerminator here] + // quirk in the grammar. + case TOK_EOL: + // The rest of these make up the complete set of tokens that can + // appear after any of the places where AssignmentExpression is used + // throughout the grammar. Conveniently, none of them can also be the + // start an expression. + case TOK_EOF: + case TOK_SEMI: + case TOK_RC: + case TOK_RB: + case TOK_RP: + case TOK_COLON: + case TOK_COMMA: + case TOK_IN: + // No value. + exprNode = null(); + tokenStream.addModifierException(TokenStream::NoneIsOperand); break; + case TOK_MUL: + kind = PNK_YIELD_STAR; + tokenStream.consumeKnownToken(TOK_MUL, TokenStream::Operand); + MOZ_FALLTHROUGH; + default: + exprNode = assignExpr(inHandling, YieldIsKeyword, TripledotProhibited); + if (!exprNode) + return null(); } - - MOZ_CRASH("yieldExpr"); + if (kind == PNK_YIELD_STAR) + return handler.newYieldStarExpression(begin, exprNode); + return handler.newYieldExpression(begin, exprNode); } template @@ -8114,7 +8111,7 @@ Parser::assignExpr(InHandling inHandling, YieldHandling yie return null(); return functionDefinition(pn, toStringStart, inHandling, yieldHandling, nullptr, - Arrow, NotGenerator, asyncKind); + Arrow, GeneratorKind::NotGenerator, asyncKind); } default: @@ -8389,14 +8386,14 @@ Parser::generatorComprehensionLambda(unsigned begin) return null(); RootedFunction fun(context, newFunction(/* atom = */ nullptr, Expression, - StarGenerator, SyncFunction, proto)); + GeneratorKind::Generator, SyncFunction, proto)); if (!fun) return null(); // Create box for fun->object early to root it. Directives directives(/* strict = */ outerpc->sc()->strict()); FunctionBox* genFunbox = newFunctionBox(genfn, fun, /* toStringStart = */ begin, directives, - StarGenerator, SyncFunction); + GeneratorKind::Generator, SyncFunction); if (!genFunbox) return null(); genFunbox->isGenexpLambda = true; @@ -8423,7 +8420,7 @@ Parser::generatorComprehensionLambda(unsigned begin) if (!body) return null(); - Node comp = comprehension(StarGenerator); + Node comp = comprehension(GeneratorKind::Generator); if (!comp) return null(); @@ -8584,10 +8581,10 @@ Parser::comprehensionTail(GeneratorKind comprehensionKind) if (!bodyExpr) return null(); - if (comprehensionKind == NotGenerator) + if (comprehensionKind == GeneratorKind::NotGenerator) return handler.newArrayPush(begin, bodyExpr); - MOZ_ASSERT(comprehensionKind == StarGenerator); + MOZ_ASSERT(comprehensionKind == GeneratorKind::Generator); Node yieldExpr = handler.newYieldExpression(begin, bodyExpr); if (!yieldExpr) return null(); @@ -8610,7 +8607,7 @@ Parser::comprehension(GeneratorKind comprehensionKind) if (!body) return null(); - if (comprehensionKind != NotGenerator && pc->lastYieldOffset != startYieldOffset) { + if (comprehensionKind == GeneratorKind::Generator && pc->lastYieldOffset != startYieldOffset) { errorAt(pc->lastYieldOffset, JSMSG_BAD_GENEXP_BODY, js_yield_str); return null(); } @@ -8622,7 +8619,7 @@ template typename ParseHandler::Node Parser::arrayComprehension(uint32_t begin) { - Node inner = comprehension(NotGenerator); + Node inner = comprehension(GeneratorKind::NotGenerator); if (!inner) return null(); @@ -9914,8 +9911,8 @@ Parser::methodDefinition(uint32_t toStringStart, PropertyTy GeneratorKind generatorKind = (propType == PropertyType::GeneratorMethod || propType == PropertyType::AsyncGeneratorMethod) - ? StarGenerator - : NotGenerator; + ? GeneratorKind::Generator + : GeneratorKind::NotGenerator; FunctionAsyncKind asyncKind = (propType == PropertyType::AsyncMethod || propType == PropertyType::AsyncGeneratorMethod) diff --git a/js/src/frontend/Parser.h b/js/src/frontend/Parser.h index 4f6c562ba8b4..b01f7e29820c 100644 --- a/js/src/frontend/Parser.h +++ b/js/src/frontend/Parser.h @@ -172,8 +172,8 @@ class ParserBase : public StrictModeGetter TokenPos pos() const { return tokenStream.currentToken().pos; } // Determine whether |yield| is a valid name in the current context. - bool yieldExpressionsSupported() { - return pc->isStarGenerator(); + bool yieldExpressionsSupported() const { + return pc->isGenerator(); } virtual bool strictMode() { return pc->sc()->strict(); } diff --git a/js/src/frontend/SharedContext.h b/js/src/frontend/SharedContext.h index 8ca308ca7bbc..90e61c099bf4 100644 --- a/js/src/frontend/SharedContext.h +++ b/js/src/frontend/SharedContext.h @@ -404,7 +404,7 @@ class FunctionBox : public ObjectBox, public SharedContext uint32_t toStringEnd; uint16_t length; - uint8_t generatorKindBits_; /* The GeneratorKind of this function. */ + uint8_t generatorKind_; /* The GeneratorKind of this function. */ uint8_t asyncKindBits_; /* The FunctionAsyncKind of this function. */ bool isGenexpLambda:1; /* lambda from generator expression */ @@ -468,7 +468,7 @@ class FunctionBox : public ObjectBox, public SharedContext return hasExtensibleScope() || needsHomeObject() || isDerivedClassConstructor() || - isStarGenerator() || + isGenerator() || isAsync(); } @@ -487,18 +487,18 @@ class FunctionBox : public ObjectBox, public SharedContext return usesArguments && usesApply && usesThis && !usesReturn; } - GeneratorKind generatorKind() const { return GeneratorKindFromBits(generatorKindBits_); } - bool isStarGenerator() const { return generatorKind() == StarGenerator; } + GeneratorKind generatorKind() const { return GeneratorKindFromBit(generatorKind_); } + bool isGenerator() const { return generatorKind() == GeneratorKind::Generator; } FunctionAsyncKind asyncKind() const { return AsyncKindFromBits(asyncKindBits_); } bool needsFinalYield() const { - return isStarGenerator() || isAsync(); + return isGenerator() || isAsync(); } bool needsDotGeneratorName() const { - return isStarGenerator() || isAsync(); + return isGenerator() || isAsync(); } bool needsIteratorResult() const { - return isStarGenerator(); + return isGenerator(); } bool isAsync() const { return asyncKind() == AsyncFunction; } @@ -514,14 +514,6 @@ class FunctionBox : public ObjectBox, public SharedContext isExprBody_ = true; } - void setGeneratorKind(GeneratorKind kind) { - // A generator kind can be set at initialization, or when "yield" is - // first seen. In both cases the transition can only happen from - // NotGenerator. - MOZ_ASSERT(!isStarGenerator()); - generatorKindBits_ = GeneratorKindAsBits(kind); - } - bool hasExtensibleScope() const { return funCxFlags.hasExtensibleScope; } bool hasThisBinding() const { return funCxFlags.hasThisBinding; } bool argumentsHasLocalBinding() const { return funCxFlags.argumentsHasLocalBinding; } @@ -621,7 +613,7 @@ SharedContext::allBindingsClosedOver() { return bindingsAccessedDynamically() || (isFunctionBox() && - (asFunctionBox()->isStarGenerator() || + (asFunctionBox()->isGenerator() || asFunctionBox()->isAsync())); } diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp index 3c08cb53f2be..7c6c39c4daf4 100644 --- a/js/src/jit/Ion.cpp +++ b/js/src/jit/Ion.cpp @@ -2275,7 +2275,7 @@ IonCompile(JSContext* cx, JSScript* script, static bool CheckFrame(JSContext* cx, BaselineFrame* frame) { - MOZ_ASSERT(!frame->script()->isStarGenerator()); + MOZ_ASSERT(!frame->script()->isGenerator()); MOZ_ASSERT(!frame->script()->isAsync()); MOZ_ASSERT(!frame->isDebuggerEvalFrame()); MOZ_ASSERT(!frame->isEvalFrame()); @@ -2307,7 +2307,7 @@ CheckScript(JSContext* cx, JSScript* script, bool osr) return false; } - if (script->isStarGenerator()) { + if (script->isGenerator()) { TrackAndSpewIonAbort(cx, script, "generator script"); return false; } diff --git a/js/src/jit/IonAnalysis.cpp b/js/src/jit/IonAnalysis.cpp index 1507a8eeaacf..5b9460489b9b 100644 --- a/js/src/jit/IonAnalysis.cpp +++ b/js/src/jit/IonAnalysis.cpp @@ -4416,7 +4416,7 @@ jit::AnalyzeArgumentsUsage(JSContext* cx, JSScript* scriptArg) // // FIXME: Don't build arguments for ES6 generator expressions. if (scriptArg->isDebuggee() || - script->isStarGenerator() || + script->isGenerator() || script->isAsync() || script->bindingsAccessedDynamically()) { diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index b4f74d8bf1db..d25b0ea783f0 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -131,7 +131,7 @@ IsSloppyNormalFunction(JSFunction* fun) if (fun->isBuiltin() || fun->isBoundFunction()) return false; - if (fun->isStarGenerator() || fun->isAsync()) + if (fun->isGenerator() || fun->isAsync()) return false; MOZ_ASSERT(fun->isInterpreted()); @@ -420,12 +420,12 @@ ResolveInterpretedFunctionPrototype(JSContext* cx, HandleFunction fun, HandleId // the function object itself, unless the function is an ES6 generator. In // that case, per the 15 July 2013 ES6 draft, section 15.19.3, its parent is // the GeneratorObjectPrototype singleton. - bool isStarGenerator = fun->isStarGenerator(); + bool isGenerator = fun->isGenerator(); Rooted global(cx, &fun->global()); RootedObject objProto(cx); if (isAsyncGenerator) objProto = GlobalObject::getOrCreateAsyncGeneratorPrototype(cx, global); - else if (isStarGenerator) + else if (isGenerator) objProto = GlobalObject::getOrCreateStarGeneratorObjectPrototype(cx, global); else objProto = GlobalObject::getOrCreateObjectPrototype(cx, global); @@ -441,7 +441,7 @@ ResolveInterpretedFunctionPrototype(JSContext* cx, HandleFunction fun, HandleId // non-enumerable, and writable. However, per the 15 July 2013 ES6 draft, // section 15.19.3, the .prototype of a generator function does not link // back with a .constructor. - if (!isStarGenerator && !isAsyncGenerator) { + if (!isGenerator && !isAsyncGenerator) { RootedValue objVal(cx, ObjectValue(*fun)); if (!DefineDataProperty(cx, proto, cx->names().constructor, objVal, 0)) return false; @@ -477,7 +477,7 @@ JSFunction::needsPrototypeProperty() if (isBuiltin()) return IsWrappedAsyncGenerator(this); - return isConstructor() || isStarGenerator() || isAsync(); + return isConstructor() || isGenerator() || isAsync(); } static bool @@ -595,7 +595,7 @@ js::XDRInterpretedFunction(XDRState* xdr, HandleScope enclosingScope, if (fun->explicitName() || fun->hasCompileTimeName() || fun->hasGuessedAtom()) firstword |= HasAtom; - if (fun->isStarGenerator() || fun->isAsync()) + if (fun->isGenerator() || fun->isAsync()) firstword |= HasStarGeneratorProto; if (fun->isInterpretedLazy()) { @@ -1084,7 +1084,7 @@ js::FunctionToString(JSContext* cx, HandleFunction fun, bool isToSource) if (!out.append("function")) return nullptr; - if (fun->isStarGenerator()) { + if (fun->isGenerator()) { if (!out.append('*')) return nullptr; } @@ -1750,7 +1750,7 @@ fun_isGenerator(JSContext* cx, unsigned argc, Value* vp) return true; } - args.rval().setBoolean(fun->isStarGenerator()); + args.rval().setBoolean(fun->isGenerator()); return true; } @@ -1781,7 +1781,7 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat return false; } - bool isStarGenerator = generatorKind == StarGenerator; + bool isGenerator = generatorKind == GeneratorKind::Generator; bool isAsync = asyncKind == AsyncFunction; RootedScript maybeScript(cx); @@ -1794,11 +1794,11 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat const char* introductionType = "Function"; if (isAsync) { - if (isStarGenerator) + if (isGenerator) introductionType = "AsyncGenerator"; else introductionType = "AsyncFunction"; - } else if (generatorKind != NotGenerator) { + } else if (isGenerator) { introductionType = "GeneratorFunction"; } @@ -1820,7 +1820,7 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat } if (!sb.append("function")) return false; - if (isStarGenerator) { + if (isGenerator) { if (!sb.append('*')) return false; } @@ -1893,7 +1893,7 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat // Use %Generator% for generators and the unwrapped function of async // functions and async generators. RootedObject defaultProto(cx); - if (isStarGenerator || isAsync) { + if (isGenerator || isAsync) { defaultProto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(cx, global); if (!defaultProto) return false; @@ -1901,7 +1901,7 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat // Step 30-37 (reordered). RootedObject globalLexical(cx, &global->lexicalEnvironment()); - JSFunction::Flags flags = (isStarGenerator || isAsync) + JSFunction::Flags flags = (isGenerator || isAsync) ? JSFunction::INTERPRETED_LAMBDA_GENERATOR_OR_ASYNC : JSFunction::INTERPRETED_LAMBDA; AllocKind allocKind = isAsync ? AllocKind::FUNCTION_EXTENDED : AllocKind::FUNCTION; @@ -1926,7 +1926,7 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat : SourceBufferHolder::NoOwnership; SourceBufferHolder srcBuf(chars.begin().get(), chars.length(), ownership); if (isAsync) { - if (isStarGenerator) { + if (isGenerator) { if (!CompileStandaloneAsyncGenerator(cx, &fun, options, srcBuf, parameterListEnd)) return false; } else { @@ -1934,7 +1934,7 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat return false; } } else { - if (isStarGenerator) { + if (isGenerator) { if (!CompileStandaloneGenerator(cx, &fun, options, srcBuf, parameterListEnd)) return false; } else { @@ -1951,7 +1951,7 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat if (isAsync) { // Create the async function wrapper. JSObject* wrapped; - if (isStarGenerator) { + if (isGenerator) { wrapped = proto ? WrapAsyncGeneratorWithProto(cx, fun, proto) : WrapAsyncGenerator(cx, fun); @@ -1981,28 +1981,28 @@ bool js::Function(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); - return CreateDynamicFunction(cx, args, NotGenerator, SyncFunction); + return CreateDynamicFunction(cx, args, GeneratorKind::NotGenerator, SyncFunction); } bool js::Generator(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); - return CreateDynamicFunction(cx, args, StarGenerator, SyncFunction); + return CreateDynamicFunction(cx, args, GeneratorKind::Generator, SyncFunction); } bool js::AsyncFunctionConstructor(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); - return CreateDynamicFunction(cx, args, NotGenerator, AsyncFunction); + return CreateDynamicFunction(cx, args, GeneratorKind::NotGenerator, AsyncFunction); } bool js::AsyncGeneratorConstructor(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); - return CreateDynamicFunction(cx, args, StarGenerator, AsyncFunction); + return CreateDynamicFunction(cx, args, GeneratorKind::Generator, AsyncFunction); } bool @@ -2145,7 +2145,7 @@ NewFunctionClone(JSContext* cx, HandleFunction fun, NewObjectKind newKind, gc::AllocKind allocKind, HandleObject proto) { RootedObject cloneProto(cx, proto); - if (!proto && (fun->isStarGenerator() || fun->isAsync())) { + if (!proto && (fun->isGenerator() || fun->isAsync())) { cloneProto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(cx, cx->global()); if (!cloneProto) return nullptr; diff --git a/js/src/jsfun.h b/js/src/jsfun.h index ce8761339a09..b57c3ea1bdf1 100644 --- a/js/src/jsfun.h +++ b/js/src/jsfun.h @@ -149,7 +149,7 @@ class JSFunction : public js::NativeObject MOZ_ASSERT_IF(nonLazyScript()->funHasExtensibleScope() || nonLazyScript()->needsHomeObject() || nonLazyScript()->isDerivedClassConstructor() || - isStarGenerator() || + isGenerator() || isAsync(), nonLazyScript()->bodyScope()->hasEnvironment()); @@ -510,16 +510,16 @@ class JSFunction : public js::NativeObject js::GeneratorKind generatorKind() const { if (!isInterpreted()) - return js::NotGenerator; + return js::GeneratorKind::NotGenerator; if (hasScript()) return nonLazyScript()->generatorKind(); if (js::LazyScript* lazy = lazyScriptOrNull()) return lazy->generatorKind(); MOZ_ASSERT(isSelfHostedBuiltin()); - return js::NotGenerator; + return js::GeneratorKind::NotGenerator; } - bool isStarGenerator() const { return generatorKind() == js::StarGenerator; } + bool isGenerator() const { return generatorKind() == js::GeneratorKind::Generator; } js::FunctionAsyncKind asyncKind() const { return isInterpretedLazy() ? lazyScript()->asyncKind() : nonLazyScript()->asyncKind(); diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp index 1df9ebc59731..6142d2459c6f 100644 --- a/js/src/jsscript.cpp +++ b/js/src/jsscript.cpp @@ -341,7 +341,7 @@ js::XDRScript(XDRState* xdr, HandleScope scriptEnclosingScope, FunctionHasThisBinding, FunctionHasExtraBodyVarScope, IsGeneratorExp, - IsStarGenerator, + IsGenerator, IsAsync, HasRest, IsExprBody, @@ -456,8 +456,8 @@ js::XDRScript(XDRState* xdr, HandleScope scriptEnclosingScope, scriptBits |= (1 << OwnSource); if (script->isGeneratorExp()) scriptBits |= (1 << IsGeneratorExp); - if (script->isStarGenerator()) - scriptBits |= (1 << IsStarGenerator); + if (script->isGenerator()) + scriptBits |= (1 << IsGenerator); if (script->asyncKind() == AsyncFunction) scriptBits |= (1 << IsAsync); if (script->hasRest()) @@ -629,8 +629,8 @@ js::XDRScript(XDRState* xdr, HandleScope scriptEnclosingScope, script->isDerivedClassConstructor_ = true; if (scriptBits & (1 << IsDefaultClassConstructor)) script->isDefaultClassConstructor_ = true; - if (scriptBits & (1 << IsStarGenerator)) - script->setGeneratorKind(StarGenerator); + if (scriptBits & (1 << IsGenerator)) + script->setGeneratorKind(GeneratorKind::Generator); if (scriptBits & (1 << IsAsync)) script->setAsyncKind(AsyncFunction); if (scriptBits & (1 << HasRest)) @@ -2980,7 +2980,7 @@ JSScript::initFromModuleContext(JSContext* cx, HandleScript script, script->funLength_ = 0; script->isGeneratorExp_ = false; - script->setGeneratorKind(NotGenerator); + script->setGeneratorKind(GeneratorKind::NotGenerator); // Since modules are only run once, mark the script so that initializers // created within it may be given more precise types. @@ -3456,7 +3456,7 @@ CloneInnerInterpretedFunction(JSContext* cx, HandleScope enclosingScope, HandleF { /* NB: Keep this in sync with XDRInterpretedFunction. */ RootedObject cloneProto(cx); - if (srcFun->isStarGenerator() || srcFun->isAsync()) { + if (srcFun->isGenerator() || srcFun->isAsync()) { cloneProto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(cx, cx->global()); if (!cloneProto) return nullptr; @@ -4196,7 +4196,7 @@ JSScript::argumentsOptimizationFailed(JSContext* cx, HandleScript script) if (script->needsArgsObj()) return true; - MOZ_ASSERT(!script->isStarGenerator()); + MOZ_ASSERT(!script->isGenerator()); MOZ_ASSERT(!script->isAsync()); script->needsArgsObj_ = true; @@ -4385,7 +4385,7 @@ LazyScript::Create(JSContext* cx, HandleFunction fun, p.isExprBody = false; p.numClosedOverBindings = closedOverBindings.length(); p.numInnerFunctions = innerFunctions.length(); - p.generatorKindBits = GeneratorKindAsBits(NotGenerator); + p.generatorKind = GeneratorKindAsBit(GeneratorKind::NotGenerator); p.strict = false; p.bindingsAccessedDynamically = false; p.hasDebuggerStatement = false; diff --git a/js/src/jsscript.h b/js/src/jsscript.h index a5fcf6f1ccc1..3df89f9274f9 100644 --- a/js/src/jsscript.h +++ b/js/src/jsscript.h @@ -752,17 +752,19 @@ class ScriptSourceObject : public NativeObject static const uint32_t RESERVED_SLOTS = 4; }; -enum GeneratorKind { NotGenerator, StarGenerator }; +enum class GeneratorKind : bool { NotGenerator, Generator }; enum FunctionAsyncKind { SyncFunction, AsyncFunction }; static inline unsigned -GeneratorKindAsBits(GeneratorKind generatorKind) { +GeneratorKindAsBit(GeneratorKind generatorKind) +{ return static_cast(generatorKind); } static inline GeneratorKind -GeneratorKindFromBits(unsigned val) { - MOZ_ASSERT(val <= StarGenerator); +GeneratorKindFromBit(unsigned val) +{ + MOZ_ASSERT(val <= unsigned(GeneratorKind::Generator)); return static_cast(val); } @@ -1033,7 +1035,7 @@ class JSScript : public js::gc::TenuredCell uint8_t hasArrayBits:ARRAY_KIND_BITS; // The GeneratorKind of the script. - uint8_t generatorKindBits_:2; + uint8_t generatorKind_:1; // 1-bit fields. @@ -1443,14 +1445,14 @@ class JSScript : public js::gc::TenuredCell } js::GeneratorKind generatorKind() const { - return js::GeneratorKindFromBits(generatorKindBits_); + return js::GeneratorKindFromBit(generatorKind_); } - bool isStarGenerator() const { return generatorKind() == js::StarGenerator; } + bool isGenerator() const { return generatorKind() == js::GeneratorKind::Generator; } void setGeneratorKind(js::GeneratorKind kind) { // A script only gets its generator kind set as part of initialization, // so it can only transition from not being a generator. - MOZ_ASSERT(!isStarGenerator()); - generatorKindBits_ = GeneratorKindAsBits(kind); + MOZ_ASSERT(!isGenerator()); + generatorKind_ = GeneratorKindAsBit(kind); } js::FunctionAsyncKind asyncKind() const { @@ -1612,7 +1614,7 @@ class JSScript : public js::gc::TenuredCell bool isRelazifiable() const { return (selfHosted() || lazyScript) && !hasInnerFunctions_ && !types_ && - !isStarGenerator() && !isAsync() && + !isGenerator() && !isAsync() && !isDefaultClassConstructor() && !hasBaselineScript() && !hasAnyIonScript() && !doNotRelazify_; @@ -1834,7 +1836,7 @@ class JSScript : public js::gc::TenuredCell bool hasTrynotes() const { return hasArray(TRYNOTES); } bool hasScopeNotes() const { return hasArray(SCOPENOTES); } bool hasYieldAndAwaitOffsets() const { - return isStarGenerator() || isAsync(); + return isGenerator() || isAsync(); } #define OFF(fooOff, hasFoo, t) (fooOff() + (hasFoo() ? sizeof(t) : 0)) @@ -2129,7 +2131,7 @@ class LazyScript : public gc::TenuredCell uint32_t numInnerFunctions : NumInnerFunctionsBits; - uint32_t generatorKindBits : 2; + uint32_t generatorKind : 1; // N.B. These are booleans but need to be uint32_t to pack correctly on MSVC. // If you add another boolean here, make sure to initialze it in @@ -2253,15 +2255,15 @@ class LazyScript : public gc::TenuredCell return (GCPtrFunction*)&closedOverBindings()[numClosedOverBindings()]; } - GeneratorKind generatorKind() const { return GeneratorKindFromBits(p_.generatorKindBits); } + GeneratorKind generatorKind() const { return GeneratorKindFromBit(p_.generatorKind); } - bool isStarGenerator() const { return generatorKind() == StarGenerator; } + bool isGenerator() const { return generatorKind() == GeneratorKind::Generator; } void setGeneratorKind(GeneratorKind kind) { // A script only gets its generator kind set as part of initialization, // so it can only transition from NotGenerator. - MOZ_ASSERT(!isStarGenerator()); - p_.generatorKindBits = GeneratorKindAsBits(kind); + MOZ_ASSERT(!isGenerator()); + p_.generatorKind = GeneratorKindAsBit(kind); } FunctionAsyncKind asyncKind() const { diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp index a9e606f774de..97bc14ba9d05 100644 --- a/js/src/vm/Debugger.cpp +++ b/js/src/vm/Debugger.cpp @@ -1592,7 +1592,7 @@ CheckResumptionValue(JSContext* cx, AbstractFramePtr frame, const Maybe, value: }. RootedFunction callee(cx, frame.callee()); - if (callee->isStarGenerator()) { + if (callee->isGenerator()) { if (!CheckStarGeneratorResumptionValue(cx, vp)) { JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_BAD_YIELD); return false; @@ -5375,7 +5375,7 @@ static bool DebuggerScript_getIsGeneratorFunction(JSContext* cx, unsigned argc, Value* vp) { THIS_DEBUGSCRIPT_SCRIPT(cx, argc, vp, "(get isGeneratorFunction)", args, obj, script); - args.rval().setBoolean(script->isStarGenerator()); + args.rval().setBoolean(script->isGenerator()); return true; } @@ -7648,7 +7648,7 @@ DebuggerFrame::getEnvironment(JSContext* cx, HandleDebuggerFrame frame, DebuggerFrame::getIsGenerator(HandleDebuggerFrame frame) { AbstractFramePtr referent = DebuggerFrame::getReferent(frame); - return referent.hasScript() && referent.script()->isStarGenerator(); + return referent.hasScript() && referent.script()->isGenerator(); } /* static */ bool @@ -9962,7 +9962,7 @@ DebuggerObject::isGeneratorFunction() const MOZ_ASSERT(isDebuggeeFunction()); JSFunction* fun = RemoveAsyncWrapper(&referent()->as()); - return fun->isStarGenerator(); + return fun->isGenerator(); } bool diff --git a/js/src/vm/EnvironmentObject.cpp b/js/src/vm/EnvironmentObject.cpp index b24b41070d7a..4c7b042c2df7 100644 --- a/js/src/vm/EnvironmentObject.cpp +++ b/js/src/vm/EnvironmentObject.cpp @@ -2598,7 +2598,7 @@ DebugEnvironments::addDebugEnvironment(JSContext* cx, const EnvironmentIter& ei, MOZ_ASSERT(cx->compartment() == debugEnv->compartment()); // Generators should always have environments. MOZ_ASSERT_IF(ei.scope().is(), - !ei.scope().as().canonicalFunction()->isStarGenerator() && + !ei.scope().as().canonicalFunction()->isGenerator() && !ei.scope().as().canonicalFunction()->isAsync()); if (!CanUseDebugEnvironmentMaps(cx)) @@ -2745,7 +2745,7 @@ DebugEnvironments::onPopCall(JSContext* cx, AbstractFramePtr frame) if (!frame.environmentChain()->is()) return; - if (frame.callee()->isStarGenerator() || frame.callee()->isAsync()) + if (frame.callee()->isGenerator() || frame.callee()->isAsync()) return; CallObject& callobj = frame.environmentChain()->as(); @@ -2879,7 +2879,7 @@ DebugEnvironments::updateLiveEnvironments(JSContext* cx) continue; if (frame.isFunctionFrame()) { - if (frame.callee()->isStarGenerator() || frame.callee()->isAsync()) + if (frame.callee()->isGenerator() || frame.callee()->isAsync()) continue; } @@ -3043,7 +3043,7 @@ GetDebugEnvironmentForMissing(JSContext* cx, const EnvironmentIter& ei) if (ei.scope().is()) { RootedFunction callee(cx, ei.scope().as().canonicalFunction()); // Generators should always reify their scopes. - MOZ_ASSERT(!callee->isStarGenerator() && !callee->isAsync()); + MOZ_ASSERT(!callee->isGenerator() && !callee->isAsync()); JS::ExposeObjectToActiveJS(callee); Rooted callobj(cx, CallObject::createHollowForDebug(cx, callee)); diff --git a/js/src/vm/GeneratorObject.cpp b/js/src/vm/GeneratorObject.cpp index 7f23dbf0e896..b26793570c21 100644 --- a/js/src/vm/GeneratorObject.cpp +++ b/js/src/vm/GeneratorObject.cpp @@ -20,7 +20,7 @@ using namespace js; JSObject* GeneratorObject::create(JSContext* cx, AbstractFramePtr frame) { - MOZ_ASSERT(frame.script()->isStarGenerator() || frame.script()->isAsync()); + MOZ_ASSERT(frame.script()->isGenerator() || frame.script()->isAsync()); MOZ_ASSERT(frame.script()->nfixed() == 0); Rooted global(cx, cx->global()); @@ -62,7 +62,7 @@ GeneratorObject::suspend(JSContext* cx, HandleObject obj, AbstractFramePtr frame Rooted genObj(cx, &obj->as()); MOZ_ASSERT(!genObj->hasExpressionStack() || genObj->isExpressionStackEmpty()); MOZ_ASSERT_IF(*pc == JSOP_AWAIT, genObj->callee().isAsync()); - MOZ_ASSERT_IF(*pc == JSOP_YIELD, genObj->callee().isStarGenerator()); + MOZ_ASSERT_IF(*pc == JSOP_YIELD, genObj->callee().isGenerator()); ArrayObject* stack = nullptr; if (nvalues > 0) { diff --git a/js/src/vm/ObjectGroup.cpp b/js/src/vm/ObjectGroup.cpp index 0688c457f365..e2560ea50728 100644 --- a/js/src/vm/ObjectGroup.cpp +++ b/js/src/vm/ObjectGroup.cpp @@ -187,7 +187,7 @@ ObjectGroup::useSingletonForNewObject(JSContext* cx, JSScript* script, jsbytecod * Sub2 lets us continue to distinguish the two subclasses and any extra * properties added to those prototype objects. */ - if (script->isStarGenerator() || script->isAsync()) + if (script->isGenerator() || script->isAsync()) return false; if (JSOp(*pc) != JSOP_NEW) return false; diff --git a/js/src/vm/Probes-inl.h b/js/src/vm/Probes-inl.h index 37b3ed807974..54a14deafe1b 100644 --- a/js/src/vm/Probes-inl.h +++ b/js/src/vm/Probes-inl.h @@ -41,7 +41,7 @@ probes::EnterScript(JSContext* cx, JSScript* script, JSFunction* maybeFun, if (rt->geckoProfiler().enabled()) { if (!cx->geckoProfiler().enter(cx, script, maybeFun)) return false; - MOZ_ASSERT_IF(!fp->script()->isStarGenerator() && + MOZ_ASSERT_IF(!fp->script()->isGenerator() && !fp->script()->isAsync(), !fp->hasPushedGeckoProfilerFrame()); fp->setPushedGeckoProfilerFrame(); diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index 07ca2d027794..28c4582a18ab 100644 --- a/js/src/vm/SelfHosting.cpp +++ b/js/src/vm/SelfHosting.cpp @@ -3126,7 +3126,7 @@ JSRuntime::cloneSelfHostedFunctionScript(JSContext* cx, HandlePropertyName name, return false; // JSFunction::generatorKind can't handle lazy self-hosted functions, so we make sure there // aren't any. - MOZ_ASSERT(!sourceFun->isStarGenerator() && !sourceFun->isAsync()); + MOZ_ASSERT(!sourceFun->isGenerator() && !sourceFun->isAsync()); MOZ_ASSERT(targetFun->isExtended()); MOZ_ASSERT(targetFun->isInterpretedLazy()); MOZ_ASSERT(targetFun->isSelfHostedBuiltin()); diff --git a/js/src/vm/Stack-inl.h b/js/src/vm/Stack-inl.h index f71d3287bd16..923bc85fa983 100644 --- a/js/src/vm/Stack-inl.h +++ b/js/src/vm/Stack-inl.h @@ -322,7 +322,7 @@ InterpreterStack::resumeGeneratorCallFrame(JSContext* cx, InterpreterRegs& regs, HandleFunction callee, HandleValue newTarget, HandleObject envChain) { - MOZ_ASSERT(callee->isStarGenerator() || callee->isAsync()); + MOZ_ASSERT(callee->isGenerator() || callee->isAsync()); RootedScript script(cx, JSFunction::getOrCreateScript(cx, callee)); InterpreterFrame* prev = regs.fp(); jsbytecode* prevpc = regs.pc; diff --git a/js/src/vm/Stack.cpp b/js/src/vm/Stack.cpp index 9a7b44c3e22d..378dada32508 100644 --- a/js/src/vm/Stack.cpp +++ b/js/src/vm/Stack.cpp @@ -264,7 +264,7 @@ InterpreterFrame::epilogue(JSContext* cx, jsbytecode* pc) UnwindAllEnvironmentsInFrame(cx, ei); if (isFunctionFrame()) { - if (!callee().isStarGenerator() && + if (!callee().isGenerator() && !callee().isAsync() && isConstructing() && thisArgument().isObject() && diff --git a/js/src/vm/Stack.h b/js/src/vm/Stack.h index 283f8f7576df..d20cee5eb6b0 100644 --- a/js/src/vm/Stack.h +++ b/js/src/vm/Stack.h @@ -714,7 +714,7 @@ class InterpreterFrame } void resumeGeneratorFrame(JSObject* envChain) { - MOZ_ASSERT(script()->isStarGenerator() || script()->isAsync()); + MOZ_ASSERT(script()->isGenerator() || script()->isAsync()); MOZ_ASSERT(isFunctionFrame()); flags_ |= HAS_INITIAL_ENV; envChain_ = envChain; diff --git a/js/src/wasm/AsmJS.cpp b/js/src/wasm/AsmJS.cpp index 58cfe2eca18b..79a4e706dbba 100644 --- a/js/src/wasm/AsmJS.cpp +++ b/js/src/wasm/AsmJS.cpp @@ -7152,7 +7152,7 @@ ParseFunction(ModuleValidator& m, ParseNode** fnOut, unsigned* line) ParseContext* outerpc = m.parser().pc; Directives directives(outerpc); FunctionBox* funbox = m.parser().newFunctionBox(fn, fun, toStringStart, directives, - NotGenerator, SyncFunction); + GeneratorKind::NotGenerator, SyncFunction); if (!funbox) return false; funbox->initWithEnclosingParseContext(outerpc, frontend::Statement); @@ -8680,7 +8680,7 @@ EstablishPreconditions(JSContext* cx, AsmJSParser& parser) break; } - if (parser.pc->isStarGenerator()) + if (parser.pc->isGenerator()) return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by generator context"); if (parser.pc->isAsync()) From 6d3249977a19eff1d5fc752443a1f93d8dac9b9b Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 15:37:26 +0100 Subject: [PATCH 15/33] Bug 1083482 part 9 - More StarGenerator -> Generator renaming. r=anba --- js/src/frontend/ParseContext.h | 2 +- js/src/frontend/Parser.cpp | 9 ++++----- js/src/jit/BaselineIC.cpp | 2 +- js/src/jsfun.cpp | 14 +++++++------- js/src/jsscript.cpp | 2 +- js/src/vm/Debugger.cpp | 2 +- js/src/vm/GeneratorObject.cpp | 18 +++++++++--------- js/src/vm/GeneratorObject.h | 4 ++-- js/src/vm/GlobalObject.h | 30 +++++++++++++++--------------- js/src/vm/HelperThreads.cpp | 12 ++++++------ 10 files changed, 47 insertions(+), 48 deletions(-) diff --git a/js/src/frontend/ParseContext.h b/js/src/frontend/ParseContext.h index cd293d1b98e2..09048121b30c 100644 --- a/js/src/frontend/ParseContext.h +++ b/js/src/frontend/ParseContext.h @@ -626,7 +626,7 @@ class ParseContext : public Nestable return sc_->isFunctionBox() && sc_->asFunctionBox()->useAsmOrInsideUseAsm(); } - // An ES6 generator is marked as a "star generator" before its body is parsed. + // A generator is marked as a generator before its body is parsed. GeneratorKind generatorKind() const { return sc_->isFunctionBox() ? sc_->asFunctionBox()->generatorKind() diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 19e6177e2a6b..e10b7d1aa4d4 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -2720,9 +2720,8 @@ Parser::functionBody(InHandling inHandling, YieldHandling y } else { MOZ_ASSERT(type == ExpressionBody); - // Async functions are implemented as star generators, and star - // generators are assumed to be statement lists, to prepend initial - // `yield`. + // Async functions are implemented as generators, and generators are + // assumed to be statement lists, to prepend initial `yield`. Node stmtList = null(); if (pc->isAsync()) { stmtList = handler.newStatementList(pos()); @@ -3366,7 +3365,7 @@ Parser::functionDefinition(Node pn, uint32_t toStringStart, // already been created by js::StartOffThreadParseTask, so cx will not // be necessary. JSContext* cx = context->helperThread() ? nullptr : context; - proto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(cx, context->global()); + proto = GlobalObject::getOrCreateGeneratorFunctionPrototype(cx, context->global()); if (!proto) return null(); } @@ -8381,7 +8380,7 @@ Parser::generatorComprehensionLambda(unsigned begin) // be necessary. RootedObject proto(context); JSContext* cx = context->helperThread() ? nullptr : context; - proto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(cx, context->global()); + proto = GlobalObject::getOrCreateGeneratorFunctionPrototype(cx, context->global()); if (!proto) return null(); diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index 22bb37a1d949..81fcee1790c2 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -3452,7 +3452,7 @@ ICCall_IsSuspendedGenerator::Compiler::generateStubCode(MacroAssembler& masm) masm.branchTestObject(Assembler::NotEqual, argVal, &returnFalse); masm.unboxObject(argVal, genObj); - // Check if it's a StarGeneratorObject. + // Check if it's a GeneratorObject. Register scratch = regs.takeAny(); masm.branchTestObjClass(Assembler::NotEqual, genObj, scratch, &GeneratorObject::class_, &returnFalse); diff --git a/js/src/jsfun.cpp b/js/src/jsfun.cpp index d25b0ea783f0..66ea56c06608 100644 --- a/js/src/jsfun.cpp +++ b/js/src/jsfun.cpp @@ -426,7 +426,7 @@ ResolveInterpretedFunctionPrototype(JSContext* cx, HandleFunction fun, HandleId if (isAsyncGenerator) objProto = GlobalObject::getOrCreateAsyncGeneratorPrototype(cx, global); else if (isGenerator) - objProto = GlobalObject::getOrCreateStarGeneratorObjectPrototype(cx, global); + objProto = GlobalObject::getOrCreateGeneratorObjectPrototype(cx, global); else objProto = GlobalObject::getOrCreateObjectPrototype(cx, global); if (!objProto) @@ -572,7 +572,7 @@ js::XDRInterpretedFunction(XDRState* xdr, HandleScope enclosingScope, { enum FirstWordFlag { HasAtom = 0x1, - HasStarGeneratorProto = 0x2, + HasGeneratorProto = 0x2, IsLazy = 0x4, HasSingletonType = 0x8 }; @@ -596,7 +596,7 @@ js::XDRInterpretedFunction(XDRState* xdr, HandleScope enclosingScope, firstword |= HasAtom; if (fun->isGenerator() || fun->isAsync()) - firstword |= HasStarGeneratorProto; + firstword |= HasGeneratorProto; if (fun->isInterpretedLazy()) { // Encode a lazy script. @@ -636,12 +636,12 @@ js::XDRInterpretedFunction(XDRState* xdr, HandleScope enclosingScope, if (mode == XDR_DECODE) { RootedObject proto(cx); - if (firstword & HasStarGeneratorProto) { + if (firstword & HasGeneratorProto) { // If we are off thread, the generator meta-objects have // already been created by js::StartOffThreadParseTask, so // JSContext* will not be necessary. JSContext* context = cx->helperThread() ? nullptr : cx; - proto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(context, cx->global()); + proto = GlobalObject::getOrCreateGeneratorFunctionPrototype(context, cx->global()); if (!proto) return false; } @@ -1894,7 +1894,7 @@ CreateDynamicFunction(JSContext* cx, const CallArgs& args, GeneratorKind generat // functions and async generators. RootedObject defaultProto(cx); if (isGenerator || isAsync) { - defaultProto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(cx, global); + defaultProto = GlobalObject::getOrCreateGeneratorFunctionPrototype(cx, global); if (!defaultProto) return false; } @@ -2146,7 +2146,7 @@ NewFunctionClone(JSContext* cx, HandleFunction fun, NewObjectKind newKind, { RootedObject cloneProto(cx, proto); if (!proto && (fun->isGenerator() || fun->isAsync())) { - cloneProto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(cx, cx->global()); + cloneProto = GlobalObject::getOrCreateGeneratorFunctionPrototype(cx, cx->global()); if (!cloneProto) return nullptr; } diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp index 6142d2459c6f..39962a0d2dde 100644 --- a/js/src/jsscript.cpp +++ b/js/src/jsscript.cpp @@ -3457,7 +3457,7 @@ CloneInnerInterpretedFunction(JSContext* cx, HandleScope enclosingScope, HandleF /* NB: Keep this in sync with XDRInterpretedFunction. */ RootedObject cloneProto(cx); if (srcFun->isGenerator() || srcFun->isAsync()) { - cloneProto = GlobalObject::getOrCreateStarGeneratorFunctionPrototype(cx, cx->global()); + cloneProto = GlobalObject::getOrCreateGeneratorFunctionPrototype(cx, cx->global()); if (!cloneProto) return nullptr; } diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp index 97bc14ba9d05..0322c27407ae 100644 --- a/js/src/vm/Debugger.cpp +++ b/js/src/vm/Debugger.cpp @@ -1593,7 +1593,7 @@ CheckResumptionValue(JSContext* cx, AbstractFramePtr frame, const Maybe, value: }. RootedFunction callee(cx, frame.callee()); if (callee->isGenerator()) { - if (!CheckStarGeneratorResumptionValue(cx, vp)) { + if (!CheckGeneratorResumptionValue(cx, vp)) { JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_DEBUG_BAD_YIELD); return false; } diff --git a/js/src/vm/GeneratorObject.cpp b/js/src/vm/GeneratorObject.cpp index b26793570c21..fe13260bea50 100644 --- a/js/src/vm/GeneratorObject.cpp +++ b/js/src/vm/GeneratorObject.cpp @@ -33,7 +33,7 @@ GeneratorObject::create(JSContext* cx, AbstractFramePtr frame) return nullptr; RootedObject proto(cx, pval.isObject() ? &pval.toObject() : nullptr); if (!proto) { - proto = GlobalObject::getOrCreateStarGeneratorObjectPrototype(cx, global); + proto = GlobalObject::getOrCreateGeneratorObjectPrototype(cx, global); if (!proto) return nullptr; } @@ -188,7 +188,7 @@ const Class GeneratorObject::class_ = { JSCLASS_HAS_RESERVED_SLOTS(GeneratorObject::RESERVED_SLOTS) }; -static const JSFunctionSpec star_generator_methods[] = { +static const JSFunctionSpec generator_methods[] = { JS_SELF_HOSTED_FN("next", "GeneratorNext", 1, 0), JS_SELF_HOSTED_FN("throw", "GeneratorThrow", 1, 0), JS_SELF_HOSTED_FN("return", "GeneratorReturn", 1, 0), @@ -205,9 +205,9 @@ js::NewSingletonObjectWithFunctionPrototype(JSContext* cx, Handle } /* static */ bool -GlobalObject::initStarGenerators(JSContext* cx, Handle global) +GlobalObject::initGenerators(JSContext* cx, Handle global) { - if (global->getReservedSlot(STAR_GENERATOR_OBJECT_PROTO).isObject()) + if (global->getReservedSlot(GENERATOR_OBJECT_PROTO).isObject()) return true; RootedObject iteratorProto(cx, GlobalObject::getOrCreateIteratorPrototype(cx, global)); @@ -219,7 +219,7 @@ GlobalObject::initStarGenerators(JSContext* cx, Handle global) iteratorProto)); if (!genObjectProto) return false; - if (!DefinePropertiesAndFunctions(cx, genObjectProto, nullptr, star_generator_methods) || + if (!DefinePropertiesAndFunctions(cx, genObjectProto, nullptr, generator_methods) || !DefineToStringTag(cx, genObjectProto, cx->names().Generator)) { return false; @@ -252,14 +252,14 @@ GlobalObject::initStarGenerators(JSContext* cx, Handle global) return false; } - global->setReservedSlot(STAR_GENERATOR_OBJECT_PROTO, ObjectValue(*genObjectProto)); - global->setReservedSlot(STAR_GENERATOR_FUNCTION, ObjectValue(*genFunction)); - global->setReservedSlot(STAR_GENERATOR_FUNCTION_PROTO, ObjectValue(*genFunctionProto)); + global->setReservedSlot(GENERATOR_OBJECT_PROTO, ObjectValue(*genObjectProto)); + global->setReservedSlot(GENERATOR_FUNCTION, ObjectValue(*genFunction)); + global->setReservedSlot(GENERATOR_FUNCTION_PROTO, ObjectValue(*genFunctionProto)); return true; } MOZ_MUST_USE bool -js::CheckStarGeneratorResumptionValue(JSContext* cx, HandleValue v) +js::CheckGeneratorResumptionValue(JSContext* cx, HandleValue v) { // yield/return value should be an Object. if (!v.isObject()) diff --git a/js/src/vm/GeneratorObject.h b/js/src/vm/GeneratorObject.h index 9bdde447b927..993aebfef1d1 100644 --- a/js/src/vm/GeneratorObject.h +++ b/js/src/vm/GeneratorObject.h @@ -145,7 +145,7 @@ class GeneratorObject : public NativeObject return getFixedSlot(YIELD_AND_AWAIT_INDEX_SLOT).toInt32() == YIELD_AND_AWAIT_INDEX_CLOSING; } bool isSuspended() const { - // Note: also update Baseline's IsSuspendedStarGenerator code if this + // Note: also update Baseline's IsSuspendedGenerator code if this // changes. MOZ_ASSERT(!isClosed()); static_assert(YIELD_AND_AWAIT_INDEX_CLOSING < YIELD_AND_AWAIT_INDEX_RUNNING, @@ -216,7 +216,7 @@ bool GeneratorThrowOrClose(JSContext* cx, AbstractFramePtr frame, Handle global) + getOrCreateGeneratorObjectPrototype(JSContext* cx, Handle global) { - return MaybeNativeObject(getOrCreateObject(cx, global, STAR_GENERATOR_OBJECT_PROTO, - initStarGenerators)); + return MaybeNativeObject(getOrCreateObject(cx, global, GENERATOR_OBJECT_PROTO, + initGenerators)); } static NativeObject* - getOrCreateStarGeneratorFunctionPrototype(JSContext* cx, Handle global) { - return MaybeNativeObject(getOrCreateObject(cx, global, STAR_GENERATOR_FUNCTION_PROTO, - initStarGenerators)); + getOrCreateGeneratorFunctionPrototype(JSContext* cx, Handle global) { + return MaybeNativeObject(getOrCreateObject(cx, global, GENERATOR_FUNCTION_PROTO, + initGenerators)); } static JSObject* - getOrCreateStarGeneratorFunction(JSContext* cx, Handle global) { - return getOrCreateObject(cx, global, STAR_GENERATOR_FUNCTION, initStarGenerators); + getOrCreateGeneratorFunction(JSContext* cx, Handle global) { + return getOrCreateObject(cx, global, GENERATOR_FUNCTION, initGenerators); } static NativeObject* @@ -764,7 +764,7 @@ class GlobalObject : public NativeObject static bool initStringIteratorProto(JSContext* cx, Handle global); // Implemented in vm/GeneratorObject.cpp. - static bool initStarGenerators(JSContext* cx, Handle global); + static bool initGenerators(JSContext* cx, Handle global); static bool initAsyncFunction(JSContext* cx, Handle global); @@ -842,10 +842,10 @@ class GlobalObject : public NativeObject return &value.toObject().as(); } - // Returns either this global's star-generator function prototype, or null - // if that object was never created. Dodgy; for use only in also-dodgy + // Returns either this global's generator function prototype, or null if + // that object was never created. Dodgy; for use only in also-dodgy // GlobalHelperThreadState::mergeParseTaskCompartment(). - JSObject* getStarGeneratorFunctionPrototype(); + JSObject* getGeneratorFunctionPrototype(); }; /* diff --git a/js/src/vm/HelperThreads.cpp b/js/src/vm/HelperThreads.cpp index 461dbbc30e90..ea7dd301d6bb 100644 --- a/js/src/vm/HelperThreads.cpp +++ b/js/src/vm/HelperThreads.cpp @@ -700,7 +700,7 @@ EnsureParserCreatedClasses(JSContext* cx, ParseTaskKind kind) if (!EnsureConstructor(cx, global, JSProto_RegExp)) return false; // needed by regular expression literals - if (!GlobalObject::initStarGenerators(cx, global)) + if (!GlobalObject::initGenerators(cx, global)) return false; // needed by function*() {} and generator comprehensions if (kind == ParseTaskKind::Module && !GlobalObject::ensureModulePrototypesCreated(cx, global)) @@ -1720,9 +1720,9 @@ GlobalHelperThreadState::cancelParseTask(JSRuntime* rt, ParseTaskKind kind, void } JSObject* -GlobalObject::getStarGeneratorFunctionPrototype() +GlobalObject::getGeneratorFunctionPrototype() { - const Value& v = getReservedSlot(STAR_GENERATOR_FUNCTION_PROTO); + const Value& v = getReservedSlot(GENERATOR_FUNCTION_PROTO); return v.isObject() ? &v.toObject() : nullptr; } @@ -1745,7 +1745,7 @@ GlobalHelperThreadState::mergeParseTaskCompartment(JSContext* cx, ParseTask* par // different function object, so the IdentifyStandardPrototype trick // below won't work. Just special-case it. GlobalObject* parseGlobal = &parseTask->parseGlobal->as(); - JSObject* parseTaskStarGenFunctionProto = parseGlobal->getStarGeneratorFunctionPrototype(); + JSObject* parseTaskGenFunctionProto = parseGlobal->getGeneratorFunctionPrototype(); // Module objects don't have standard prototypes either. JSObject* moduleProto = parseGlobal->maybeGetModulePrototype(); @@ -1770,8 +1770,8 @@ GlobalHelperThreadState::mergeParseTaskCompartment(JSContext* cx, ParseTask* par MOZ_ASSERT(key == JSProto_Object || key == JSProto_Array || key == JSProto_Function || key == JSProto_RegExp); newProto = GetBuiltinPrototypePure(global, key); - } else if (protoObj == parseTaskStarGenFunctionProto) { - newProto = global->getStarGeneratorFunctionPrototype(); + } else if (protoObj == parseTaskGenFunctionProto) { + newProto = global->getGeneratorFunctionPrototype(); } else if (protoObj == moduleProto) { newProto = global->getModulePrototype(); } else if (protoObj == importEntryProto) { From c7e2a86894e315ffa584b6221ba2996b958dc491 Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 15:38:17 +0100 Subject: [PATCH 16/33] Bug 1083482 part 10 - Rename ResumeKind::CLOSE to ResumeKind::RETURN. r=anba --- js/src/builtin/Generator.js | 6 +++--- js/src/frontend/BytecodeEmitter.cpp | 2 +- js/src/jit/BaselineCompiler.cpp | 10 +++++----- js/src/jit/VMFunctions.cpp | 6 +++--- js/src/jit/VMFunctions.h | 4 ++-- js/src/vm/CommonPropertyNames.h | 1 - js/src/vm/GeneratorObject.cpp | 10 +++++----- js/src/vm/GeneratorObject.h | 12 ++++++------ 8 files changed, 25 insertions(+), 26 deletions(-) diff --git a/js/src/builtin/Generator.js b/js/src/builtin/Generator.js index b9451cf00c2a..90d6a8798da7 100644 --- a/js/src/builtin/Generator.js +++ b/js/src/builtin/Generator.js @@ -62,7 +62,7 @@ function GeneratorReturn(val) { try { var rval = { value: val, done: true }; - return resumeGenerator(this, rval, "close"); + return resumeGenerator(this, rval, "return"); } catch (e) { if (!GeneratorObjectIsClosed(this)) GeneratorSetClosed(this); @@ -80,6 +80,6 @@ function InterpretGeneratorResume(gen, val, kind) { return resumeGenerator(gen, val, "next"); if (kind === "throw") return resumeGenerator(gen, val, "throw"); - assert(kind === "close", "Invalid resume kind"); - return resumeGenerator(gen, val, "close"); + assert(kind === "return", "Invalid resume kind"); + return resumeGenerator(gen, val, "return"); } diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp index fab01d1d5975..fe1f6ca54e10 100644 --- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -9362,7 +9362,7 @@ BytecodeEmitter::emitSelfHostedCallFunction(ParseNode* pn) bool BytecodeEmitter::emitSelfHostedResumeGenerator(ParseNode* pn) { - // Syntax: resumeGenerator(gen, value, 'next'|'throw'|'close') + // Syntax: resumeGenerator(gen, value, 'next'|'throw'|'return') if (pn->pn_count != 4) { reportError(pn, JSMSG_MORE_ARGS_NEEDED, "resumeGenerator", "1", "s"); return false; diff --git a/js/src/jit/BaselineCompiler.cpp b/js/src/jit/BaselineCompiler.cpp index 5859f5f953ab..f287d10b991f 100644 --- a/js/src/jit/BaselineCompiler.cpp +++ b/js/src/jit/BaselineCompiler.cpp @@ -4688,7 +4688,7 @@ static const VMFunction InterpretResumeInfo = typedef bool (*GeneratorThrowFn)(JSContext*, BaselineFrame*, Handle, HandleValue, uint32_t); static const VMFunction GeneratorThrowInfo = - FunctionInfo(jit::GeneratorThrowOrClose, "GeneratorThrowOrClose", TailCall); + FunctionInfo(jit::GeneratorThrowOrReturn, "GeneratorThrowOrReturn", TailCall); bool BaselineCompiler::emit_JSOP_RESUME() @@ -4871,7 +4871,7 @@ BaselineCompiler::emit_JSOP_RESUME() Address(genObj, GeneratorObject::offsetOfYieldAndAwaitIndexSlot())); masm.jump(scratch1); } else { - MOZ_ASSERT(resumeKind == GeneratorObject::THROW || resumeKind == GeneratorObject::CLOSE); + MOZ_ASSERT(resumeKind == GeneratorObject::THROW || resumeKind == GeneratorObject::RETURN); // Update the frame's frameSize field. masm.computeEffectiveAddress(Address(BaselineFrameReg, BaselineFrame::FramePointerOffset), @@ -4897,7 +4897,7 @@ BaselineCompiler::emit_JSOP_RESUME() // Push the frame descriptor and a dummy return address (it doesn't // matter what we push here, frame iterators will use the frame pc - // set in jit::GeneratorThrowOrClose). + // set in jit::GeneratorThrowOrReturn). masm.push(scratch1); // On ARM64, the callee will push the return address. @@ -4916,8 +4916,8 @@ BaselineCompiler::emit_JSOP_RESUME() } else if (resumeKind == GeneratorObject::THROW) { pushArg(ImmGCPtr(cx->names().throw_)); } else { - MOZ_ASSERT(resumeKind == GeneratorObject::CLOSE); - pushArg(ImmGCPtr(cx->names().close)); + MOZ_ASSERT(resumeKind == GeneratorObject::RETURN); + pushArg(ImmGCPtr(cx->names().return_)); } masm.loadValue(frame.addressOfStackValue(frame.peek(-1)), retVal); diff --git a/js/src/jit/VMFunctions.cpp b/js/src/jit/VMFunctions.cpp index ac2d82fc0422..80e2ffee2fc2 100644 --- a/js/src/jit/VMFunctions.cpp +++ b/js/src/jit/VMFunctions.cpp @@ -937,8 +937,8 @@ DebugAfterYield(JSContext* cx, BaselineFrame* frame) } bool -GeneratorThrowOrClose(JSContext* cx, BaselineFrame* frame, Handle genObj, - HandleValue arg, uint32_t resumeKind) +GeneratorThrowOrReturn(JSContext* cx, BaselineFrame* frame, Handle genObj, + HandleValue arg, uint32_t resumeKind) { // Set the frame's pc to the current resume pc, so that frame iterators // work. This function always returns false, so we're guaranteed to enter @@ -948,7 +948,7 @@ GeneratorThrowOrClose(JSContext* cx, BaselineFrame* frame, HandlesetOverridePc(script->offsetToPC(offset)); MOZ_ALWAYS_TRUE(DebugAfterYield(cx, frame)); - MOZ_ALWAYS_FALSE(js::GeneratorThrowOrClose(cx, frame, genObj, arg, resumeKind)); + MOZ_ALWAYS_FALSE(js::GeneratorThrowOrReturn(cx, frame, genObj, arg, resumeKind)); return false; } diff --git a/js/src/jit/VMFunctions.h b/js/src/jit/VMFunctions.h index 42af6beddb48..b0f35f8c72f1 100644 --- a/js/src/jit/VMFunctions.h +++ b/js/src/jit/VMFunctions.h @@ -731,8 +731,8 @@ InterpretResume(JSContext* cx, HandleObject obj, HandleValue val, HandleProperty MOZ_MUST_USE bool DebugAfterYield(JSContext* cx, BaselineFrame* frame); MOZ_MUST_USE bool -GeneratorThrowOrClose(JSContext* cx, BaselineFrame* frame, Handle genObj, - HandleValue arg, uint32_t resumeKind); +GeneratorThrowOrReturn(JSContext* cx, BaselineFrame* frame, Handle genObj, + HandleValue arg, uint32_t resumeKind); MOZ_MUST_USE bool GlobalNameConflictsCheckFromIon(JSContext* cx, HandleScript script); diff --git a/js/src/vm/CommonPropertyNames.h b/js/src/vm/CommonPropertyNames.h index 9591c69f0749..9cbeab32597d 100644 --- a/js/src/vm/CommonPropertyNames.h +++ b/js/src/vm/CommonPropertyNames.h @@ -66,7 +66,6 @@ macro(caseFirst, caseFirst, "caseFirst") \ macro(catch, catch_, "catch") \ macro(class, class_, "class") \ - macro(close, close, "close") \ macro(Collator, Collator, "Collator") \ macro(collections, collections, "collections") \ macro(columnNumber, columnNumber, "columnNumber") \ diff --git a/js/src/vm/GeneratorObject.cpp b/js/src/vm/GeneratorObject.cpp index fe13260bea50..e15d53d39f64 100644 --- a/js/src/vm/GeneratorObject.cpp +++ b/js/src/vm/GeneratorObject.cpp @@ -114,14 +114,14 @@ js::SetGeneratorClosed(JSContext* cx, AbstractFramePtr frame) } bool -js::GeneratorThrowOrClose(JSContext* cx, AbstractFramePtr frame, Handle genObj, - HandleValue arg, uint32_t resumeKind) +js::GeneratorThrowOrReturn(JSContext* cx, AbstractFramePtr frame, Handle genObj, + HandleValue arg, uint32_t resumeKind) { if (resumeKind == GeneratorObject::THROW) { cx->setPendingException(arg); genObj->setRunning(); } else { - MOZ_ASSERT(resumeKind == GeneratorObject::CLOSE); + MOZ_ASSERT(resumeKind == GeneratorObject::RETURN); MOZ_ASSERT(arg.isObject()); frame.setReturnValue(arg); @@ -175,8 +175,8 @@ GeneratorObject::resume(JSContext* cx, InterpreterActivation& activation, return true; case THROW: - case CLOSE: - return GeneratorThrowOrClose(cx, activation.regs().fp(), genObj, arg, resumeKind); + case RETURN: + return GeneratorThrowOrReturn(cx, activation.regs().fp(), genObj, arg, resumeKind); default: MOZ_CRASH("bad resumeKind"); diff --git a/js/src/vm/GeneratorObject.h b/js/src/vm/GeneratorObject.h index 993aebfef1d1..860a736b924d 100644 --- a/js/src/vm/GeneratorObject.h +++ b/js/src/vm/GeneratorObject.h @@ -34,7 +34,7 @@ class GeneratorObject : public NativeObject RESERVED_SLOTS }; - enum ResumeKind { NEXT, THROW, CLOSE }; + enum ResumeKind { NEXT, THROW, RETURN }; static const Class class_; @@ -46,7 +46,7 @@ class GeneratorObject : public NativeObject static inline ResumeKind getResumeKind(jsbytecode* pc) { MOZ_ASSERT(*pc == JSOP_RESUME); unsigned arg = GET_UINT16(pc); - MOZ_ASSERT(arg <= CLOSE); + MOZ_ASSERT(arg <= RETURN); return static_cast(arg); } @@ -55,8 +55,8 @@ class GeneratorObject : public NativeObject return NEXT; if (atom == cx->names().throw_) return THROW; - MOZ_ASSERT(atom == cx->names().close); - return CLOSE; + MOZ_ASSERT(atom == cx->names().return_); + return RETURN; } static JSObject* create(JSContext* cx, AbstractFramePtr frame); @@ -211,8 +211,8 @@ class GeneratorObject : public NativeObject } }; -bool GeneratorThrowOrClose(JSContext* cx, AbstractFramePtr frame, Handle obj, - HandleValue val, uint32_t resumeKind); +bool GeneratorThrowOrReturn(JSContext* cx, AbstractFramePtr frame, Handle obj, + HandleValue val, uint32_t resumeKind); void SetGeneratorClosed(JSContext* cx, AbstractFramePtr frame); MOZ_MUST_USE bool From 98fd36da6e0d5996cab43cf32213f4469ed13afd Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 15:39:11 +0100 Subject: [PATCH 17/33] Bug 1083482 part 11 - Use infallible unbox for JSOP_ITERNEXT in Ion. r=evilpie --- js/src/jit/BaselineBailouts.cpp | 16 ---------------- js/src/jit/IonBuilder.cpp | 7 ++----- js/src/jit/IonTypes.h | 6 ------ js/src/vm/Interpreter.cpp | 8 +++++++- 4 files changed, 9 insertions(+), 28 deletions(-) diff --git a/js/src/jit/BaselineBailouts.cpp b/js/src/jit/BaselineBailouts.cpp index e1527e28a712..2a873db26822 100644 --- a/js/src/jit/BaselineBailouts.cpp +++ b/js/src/jit/BaselineBailouts.cpp @@ -1789,18 +1789,6 @@ HandleLexicalCheckFailure(JSContext* cx, HandleScript outerScript, HandleScript Invalidate(cx, innerScript); } -static void -HandleIterNextNonStringBailout(JSContext* cx, HandleScript outerScript, HandleScript innerScript) -{ - JitSpew(JitSpew_IonBailouts, "Non-string iterator value %s:%zu, inlined into %s:%zu", - innerScript->filename(), innerScript->lineno(), - outerScript->filename(), outerScript->lineno()); - - // This should only happen when legacy generators are used. - ForbidCompilation(cx, innerScript); - InvalidateAfterBailout(cx, outerScript, "non-string iterator value"); -} - static bool CopyFromRematerializedFrame(JSContext* cx, JitActivation* act, uint8_t* fp, size_t inlineDepth, BaselineFrame* frame) @@ -2041,10 +2029,6 @@ jit::FinishBailoutToBaseline(BaselineBailoutInfo* bailoutInfo) HandleBaselineInfoBailout(cx, outerScript, innerScript); break; - case Bailout_IterNextNonString: - HandleIterNextNonStringBailout(cx, outerScript, innerScript); - break; - case Bailout_ArgumentCheck: // Do nothing, bailout will resume before the argument monitor ICs. break; diff --git a/js/src/jit/IonBuilder.cpp b/js/src/jit/IonBuilder.cpp index 50f7a6d319bf..6d1d0883506f 100644 --- a/js/src/jit/IonBuilder.cpp +++ b/js/src/jit/IonBuilder.cpp @@ -12629,11 +12629,8 @@ IonBuilder::jsop_iternext() MDefinition* def = current->pop(); MOZ_ASSERT(def->type() == MIRType::Value); - // The value should be a string in most cases. Legacy generators can return - // non-string values, so in that case bailout and give up Ion compilation - // of the script. - MInstruction* unbox = MUnbox::New(alloc(), def, MIRType::String, MUnbox::Fallible, - Bailout_IterNextNonString); + // The value must be a string. + MInstruction* unbox = MUnbox::New(alloc(), def, MIRType::String, MUnbox::Infallible); current->add(unbox); current->push(unbox); diff --git a/js/src/jit/IonTypes.h b/js/src/jit/IonTypes.h index 91784c9b5291..96b11dd2b5fb 100644 --- a/js/src/jit/IonTypes.h +++ b/js/src/jit/IonTypes.h @@ -132,10 +132,6 @@ enum BailoutKind // Like Bailout_Overflow, but causes immediate invalidation. Bailout_OverflowInvalidate, - // Like NonStringInput, but should cause immediate invalidation. - // Used for jsop_iternext. - Bailout_IterNextNonString, - // Used for integer division, multiplication and modulo. // If there's a remainder, bails to return a double. // Can also signal overflow or result of -0. @@ -229,8 +225,6 @@ BailoutKindString(BailoutKind kind) // Bailouts caused by invalid assumptions. case Bailout_OverflowInvalidate: return "Bailout_OverflowInvalidate"; - case Bailout_IterNextNonString: - return "Bailout_IterNextNonString"; case Bailout_DoubleOutput: return "Bailout_DoubleOutput"; diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp index dc8432250022..3cb0af7e085a 100644 --- a/js/src/vm/Interpreter.cpp +++ b/js/src/vm/Interpreter.cpp @@ -1977,7 +1977,6 @@ CASE(EnableInterruptsPseudoOpcode) CASE(JSOP_NOP) CASE(JSOP_NOP_DESTRUCTURING) CASE(JSOP_TRY_DESTRUCTURING_ITERCLOSE) -CASE(JSOP_ITERNEXT) CASE(JSOP_UNUSED126) CASE(JSOP_UNUSED223) CASE(JSOP_CONDSWITCH) @@ -2284,6 +2283,13 @@ CASE(JSOP_ISGENCLOSING) } END_CASE(JSOP_ISGENCLOSING) +CASE(JSOP_ITERNEXT) +{ + // Ion relies on this. + MOZ_ASSERT(REGS.sp[-1].isString()); +} +END_CASE(JSOP_ITERNEXT) + CASE(JSOP_DUP) { MOZ_ASSERT(REGS.stackDepth() >= 1); From c6c2b4f6ba5a1309f66a3426f2bffe8f6a87e1b5 Mon Sep 17 00:00:00 2001 From: Jon Coppeard Date: Thu, 2 Nov 2017 14:51:27 +0000 Subject: [PATCH 18/33] Bug 1410132 - Use a separate jemalloc arena for all SpiderMonkey malloc allocations r=njn r=nbp --- config/check_spidermonkey_style.py | 1 + js/public/Utility.h | 30 +++++++++++++++++++--------- js/src/jsapi-tests/testHashTable.cpp | 7 +++---- js/src/jsapi-tests/tests.cpp | 1 + js/src/jsapi-tests/tests.h | 1 + js/src/jsstr.cpp | 13 +++++++++++- js/src/jsutil.cpp | 14 +++++++++++++ js/src/shell/js.cpp | 18 ++++++++++------- js/src/vm/Initialization.cpp | 5 +++++ js/src/wasm/WasmProcess.cpp | 13 ++++++++++++ js/src/wasm/WasmProcess.h | 3 +++ 11 files changed, 85 insertions(+), 21 deletions(-) diff --git a/config/check_spidermonkey_style.py b/config/check_spidermonkey_style.py index 8769b441d2e9..22d26529436d 100644 --- a/config/check_spidermonkey_style.py +++ b/config/check_spidermonkey_style.py @@ -69,6 +69,7 @@ included_inclnames_to_ignore = set([ 'jscustomallocator.h', # provided by embedders; allowed to be missing 'js-config.h', # generated in $OBJDIR 'fdlibm.h', # fdlibm + 'mozmemory.h', # included without a path 'pratom.h', # NSPR 'prcvar.h', # NSPR 'prerror.h', # NSPR diff --git a/js/public/Utility.h b/js/public/Utility.h index a2c53e4832fb..93ee414495e0 100644 --- a/js/public/Utility.h +++ b/js/public/Utility.h @@ -26,6 +26,8 @@ #include "jstypes.h" +#include "mozmemory.h" + /* The public JS engine namespace. */ namespace JS {} @@ -364,22 +366,33 @@ struct MOZ_RAII JS_PUBLIC_DATA(AutoEnterOOMUnsafeRegion) } /* namespace js */ +// Malloc allocation. + +namespace js { + +extern JS_PUBLIC_DATA(arena_id_t) MallocArena; + +extern void InitMallocAllocator(); +extern void ShutDownMallocAllocator(); + +} /* namespace js */ + static inline void* js_malloc(size_t bytes) { JS_OOM_POSSIBLY_FAIL(); - return malloc(bytes); + return moz_arena_malloc(js::MallocArena, bytes); } static inline void* js_calloc(size_t bytes) { JS_OOM_POSSIBLY_FAIL(); - return calloc(bytes, 1); + return moz_arena_calloc(js::MallocArena, bytes, 1); } static inline void* js_calloc(size_t nmemb, size_t size) { JS_OOM_POSSIBLY_FAIL(); - return calloc(nmemb, size); + return moz_arena_calloc(js::MallocArena, nmemb, size); } static inline void* js_realloc(void* p, size_t bytes) @@ -390,19 +403,18 @@ static inline void* js_realloc(void* p, size_t bytes) MOZ_ASSERT(bytes != 0); JS_OOM_POSSIBLY_FAIL(); - return realloc(p, bytes); + return moz_arena_realloc(js::MallocArena, p, bytes); } static inline void js_free(void* p) { + // TODO: This should call |moz_arena_free(js::MallocArena, p)| but we + // currently can't enforce that all memory freed here was allocated by + // js_malloc(). free(p); } -static inline char* js_strdup(const char* s) -{ - JS_OOM_POSSIBLY_FAIL(); - return strdup(s); -} +JS_PUBLIC_API(char*) js_strdup(const char* s); #endif/* JS_USE_CUSTOM_ALLOCATOR */ #include diff --git a/js/src/jsapi-tests/testHashTable.cpp b/js/src/jsapi-tests/testHashTable.cpp index 7919cf5b13df..35cf6b6370da 100644 --- a/js/src/jsapi-tests/testHashTable.cpp +++ b/js/src/jsapi-tests/testHashTable.cpp @@ -394,12 +394,13 @@ END_TEST(testHashMapLookupWithDefaultOOM) BEGIN_TEST(testHashTableMovableEnum) { + IntSet set; CHECK(set.init()); // Exercise returning a hash table Enum object from a function. CHECK(set.put(1)); - for (auto e = enumerateSet(); !e.empty(); e.popFront()) + for (auto e = enumerateSet(set); !e.empty(); e.popFront()) e.removeFront(); CHECK(set.count() == 0); @@ -425,9 +426,7 @@ BEGIN_TEST(testHashTableMovableEnum) return true; } -IntSet set; - -IntSet::Enum enumerateSet() +IntSet::Enum enumerateSet(IntSet& set) { return IntSet::Enum(set); } diff --git a/js/src/jsapi-tests/tests.cpp b/js/src/jsapi-tests/tests.cpp index 5671f161ea9a..6affbde9f9a8 100644 --- a/js/src/jsapi-tests/tests.cpp +++ b/js/src/jsapi-tests/tests.cpp @@ -45,6 +45,7 @@ void JSAPITest::uninit() destroyContext(); cx = nullptr; } + msgs.clear(); } bool JSAPITest::exec(const char* bytes, const char* filename, int lineno) diff --git a/js/src/jsapi-tests/tests.h b/js/src/jsapi-tests/tests.h index d580ad134fce..a9e0f24795e7 100644 --- a/js/src/jsapi-tests/tests.h +++ b/js/src/jsapi-tests/tests.h @@ -33,6 +33,7 @@ class JSAPITestString { const char* begin() const { return chars.begin(); } const char* end() const { return chars.end(); } size_t length() const { return chars.length(); } + void clear() { chars.clearAndFree(); } JSAPITestString& operator +=(const char* s) { if (!chars.append(s, strlen(s))) diff --git a/js/src/jsstr.cpp b/js/src/jsstr.cpp index 7fde0b04463e..700ea1e037fc 100644 --- a/js/src/jsstr.cpp +++ b/js/src/jsstr.cpp @@ -3868,7 +3868,12 @@ js::DuplicateString(JSContext* cx, const char16_t* s) UniqueChars js::DuplicateString(const char* s) { - return UniqueChars(js_strdup(s)); + size_t n = strlen(s) + 1; + UniqueChars ret(js_pod_malloc(n)); + if (!ret) + return ret; + PodCopy(ret.get(), s, n); + return ret; } UniqueChars @@ -3899,6 +3904,12 @@ js::DuplicateString(const char16_t* s, size_t n) return ret; } +JS_PUBLIC_API(char*) +js_strdup(const char* s) +{ + return DuplicateString(s).release(); +} + template const CharT* js_strchr_limit(const CharT* s, char16_t c, const CharT* limit) diff --git a/js/src/jsutil.cpp b/js/src/jsutil.cpp index a973a7f39101..ffa095eee8b8 100644 --- a/js/src/jsutil.cpp +++ b/js/src/jsutil.cpp @@ -170,6 +170,20 @@ ResetSimulatedInterrupt() } // namespace js #endif // defined(DEBUG) || defined(JS_OOM_BREAKPOINT) +JS_PUBLIC_DATA(arena_id_t) js::MallocArena; + +void +js::InitMallocAllocator() +{ + MallocArena = moz_create_arena(); +} + +void +js::ShutDownMallocAllocator() +{ + moz_dispose_arena(MallocArena); +} + JS_PUBLIC_API(void) JS_Assert(const char* s, const char* file, int ln) { diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 08020fdf536f..498d3ba136a0 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -3992,6 +3992,8 @@ KillWorkerThreads(JSContext* cx) thread->join(); } + workerThreads.clearAndFree(); + js_delete(workerThreadsLock); workerThreadsLock = nullptr; @@ -4927,12 +4929,12 @@ NestedShell(JSContext* cx, unsigned argc, Value* vp) JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_NESTED_FAIL); return false; } - if (!argv.append(strdup(sArgv[0]))) + if (!argv.append(js_strdup(sArgv[0]))) return false; // Propagate selected flags from the current shell for (unsigned i = 0; i < sPropagatedFlags.length(); i++) { - char* cstr = strdup(sPropagatedFlags[i]); + char* cstr = js_strdup(sPropagatedFlags[i]); if (!cstr || !argv.append(cstr)) return false; } @@ -5753,6 +5755,7 @@ ShutdownBufferStreams() state->shutdown = true; while (!state->jobs.empty()) state.wait(/* jobs empty */); + state->jobs.clearAndFree(); } static bool @@ -8652,6 +8655,12 @@ main(int argc, char** argv, char** envp) SetOutputFile("JS_STDOUT", &rcStdout, &gOutFile); SetOutputFile("JS_STDERR", &rcStderr, &gErrFile); + // Start the engine. + if (!JS_Init()) + return 1; + + auto shutdownEngine = MakeScopeExit([]() { JS_ShutDown(); }); + OptionParser op("Usage: {progname} [options] [[script] scriptArgs*]"); op.setDescription("The SpiderMonkey shell provides a command line interface to the " @@ -8875,10 +8884,6 @@ main(int argc, char** argv, char** envp) if (op.getBoolOption("no-threads")) js::DisableExtraThreads(); - // Start the engine. - if (!JS_Init()) - return 1; - if (!InitSharedArrayBufferMailbox()) return 1; @@ -8979,6 +8984,5 @@ main(int argc, char** argv, char** envp) DestructSharedArrayBufferMailbox(); JS_DestroyContext(cx); - JS_ShutDown(); return result; } diff --git a/js/src/vm/Initialization.cpp b/js/src/vm/Initialization.cpp index 3ef67db836ff..1b035a67e004 100644 --- a/js/src/vm/Initialization.cpp +++ b/js/src/vm/Initialization.cpp @@ -100,6 +100,8 @@ JS::detail::InitWithFailureDiagnostic(bool isDebugBuild) RETURN_IF_FAIL(js::oom::InitThreadType()); #endif + js::InitMallocAllocator(); + RETURN_IF_FAIL(js::Mutex::Init()); RETURN_IF_FAIL(js::wasm::InitInstanceStaticData()); @@ -170,6 +172,7 @@ JS_ShutDown(void) js::MemoryProtectionExceptionHandler::uninstall(); js::wasm::ShutDownInstanceStaticData(); + js::wasm::ShutDownProcessStaticData(); js::Mutex::ShutDown(); @@ -199,6 +202,8 @@ JS_ShutDown(void) js::jit::ReleaseProcessExecutableMemory(); } + js::ShutDownMallocAllocator(); + libraryInitState = InitState::ShutDown; } diff --git a/js/src/wasm/WasmProcess.cpp b/js/src/wasm/WasmProcess.cpp index afc378eac189..9a9920bdb22a 100644 --- a/js/src/wasm/WasmProcess.cpp +++ b/js/src/wasm/WasmProcess.cpp @@ -126,6 +126,13 @@ class ProcessCodeSegmentMap MOZ_ASSERT(segments2_.empty()); } + void freeAll() { + MOZ_ASSERT(segments1_.empty()); + MOZ_ASSERT(segments2_.empty()); + segments1_.clearAndFree(); + segments2_.clearAndFree(); + } + bool insert(const CodeSegment* cs) { LockGuard lock(mutatorsMutex_); @@ -230,3 +237,9 @@ wasm::LookupCode(const void* pc) const CodeSegment* found = LookupCodeSegment(pc); return found ? found->code() : nullptr; } + +void +wasm::ShutDownProcessStaticData() +{ + processCodeSegmentMap.freeAll(); +} diff --git a/js/src/wasm/WasmProcess.h b/js/src/wasm/WasmProcess.h index 08d25d9adfc7..d5b125a1fd35 100644 --- a/js/src/wasm/WasmProcess.h +++ b/js/src/wasm/WasmProcess.h @@ -51,6 +51,9 @@ RegisterCodeSegment(const CodeSegment* cs); void UnregisterCodeSegment(const CodeSegment* cs); +void +ShutDownProcessStaticData(); + } // namespace wasm } // namespace js From 4cba1d84c911814e77d1a687942434448ad483fa Mon Sep 17 00:00:00 2001 From: David Major Date: Thu, 2 Nov 2017 11:10:39 -0400 Subject: [PATCH 19/33] Bug 1407678 - Make windows_toolchain.py support VS2017. r=mshal DONTBUILD --HG-- extra : amend_source : 8323662749cef4ba13ac6a9f9c9910876e2487f4 --- build/docs/toolchains.rst | 2 +- build/windows_toolchain.py | 214 ++++++++++++++++++++----------------- 2 files changed, 116 insertions(+), 100 deletions(-) diff --git a/build/docs/toolchains.rst b/build/docs/toolchains.rst index 8189180b2846..ea2bded60226 100644 --- a/build/docs/toolchains.rst +++ b/build/docs/toolchains.rst @@ -51,7 +51,7 @@ Once Visual Studio 2015 Community has been installed, from a checkout of mozilla-central, run something like the following to produce a ZIP archive:: - $ ./mach python build/windows_toolchain.py create-zip vs2015u3 + $ ./mach python build/windows_toolchain.py create-zip vs2017_15.4.2 The produced archive will be the argument to ``create-zip`` + ``.zip``. diff --git a/build/windows_toolchain.py b/build/windows_toolchain.py index 8afa4b5fdbe8..58059ad23bd3 100644 --- a/build/windows_toolchain.py +++ b/build/windows_toolchain.py @@ -24,96 +24,111 @@ from mozpack.mozjar import ( ) import mozpack.path as mozpath +SDK_RELEASE = '10.0.15063.0' -# mozpack.match patterns for files under "Microsoft Visual Studio 14.0". -VS_PATTERNS = [ +PATTERNS = [ { - 'pattern': 'DIA SDK/bin/**', - 'ignore': ( - 'DIA SDK/bin/arm/**', - ), + 'srcdir': '%(vs_path)s/DIA SDK', + 'dstdir': 'DIA SDK', + 'files': [ + { + 'pattern': 'bin/**', + 'ignore': ( + 'bin/arm/**', + ), + }, + { + 'pattern': 'idl/**', + }, + { + 'pattern': 'include/**', + }, + { + 'pattern': 'lib/**', + 'ignore': ( + 'lib/arm/**', + ), + }, + ], }, { - 'pattern': 'DIA SDK/idl/**', + 'srcdir': '%(vs_path)s/VC/Tools/MSVC/14.11.25503', + 'dstdir': 'VC', + 'files': [ + # ATL is needed by Breakpad. + { + 'pattern': 'atlmfc/include/**', + }, + { + 'pattern': 'atlmfc/lib/x86/atls.*', + }, + { + 'pattern': 'atlmfc/lib/x64/atls.*', + }, + { + 'pattern': 'bin/Hostx64/**', + }, + # 32-bit PGO-instrumented builds require 32-bit pgort140.dll. + { + 'pattern': 'bin/Hostx86/x86/pgort140.dll', + }, + { + 'pattern': 'include/**', + }, + { + 'pattern': 'lib/**', + 'ignore': ( + 'lib/onecore/**', + 'lib/x64/store/**', + 'lib/x86/store/**', + ), + }, + ], }, { - 'pattern': 'DIA SDK/include/**', + 'srcdir': '%(vs_path)s/VC/Redist/MSVC/14.11.25325', + 'dstdir': 'VC/redist', + 'files': [ + { + 'pattern': 'x64/Microsoft.VC141.CRT/**', + }, + { + 'pattern': 'x86/Microsoft.VC141.CRT/**', + }, + ], }, { - 'pattern': 'DIA SDK/lib/**', - 'ignore': ( - 'DIA SDK/lib/arm/**', - ), - }, - # ATL is needed by Breakpad. - { - 'pattern': 'VC/atlmfc/include/**', - }, - { - 'pattern': 'VC/atlmfc/lib/atls.*', - }, - { - 'pattern': 'VC/atlmfc/lib/amd64/atls.*', - }, - { - 'pattern': 'VC/bin/**', - # We only care about compiling on amd64 for amd64 or x86 targets. - 'ignore': ( - 'VC/bin/amd64_arm/**', - 'VC/bin/arm/**', - 'VC/bin/x86_arm/**', - 'VC/bin/x86_amd64/**', - ), - }, - { - 'pattern': 'VC/include/**', - }, - { - 'pattern': 'VC/lib/**', - 'ignore': ( - 'VC/lib/arm/**', - 'VC/lib/onecore/**', - 'VC/lib/store/**', - ), - }, - { - 'pattern': 'VC/redist/x64/Microsoft.VC140.CRT/**', - }, - { - 'pattern': 'VC/redist/x86/Microsoft.VC140.CRT/**', - }, -] - -SDK_RELEASE = '10.0.14393.0' - -# Files from the Windows 10 SDK to install. -SDK_PATTERNS = [ - { - 'pattern': 'bin/x64/**', - }, - { - 'pattern': 'Include/%s/**' % SDK_RELEASE, - }, - { - 'pattern': 'Lib/%s/ucrt/x64/**' % SDK_RELEASE, - }, - { - 'pattern': 'Lib/%s/ucrt/x86/**' % SDK_RELEASE, - }, - { - 'pattern': 'Lib/%s/um/x64/**' % SDK_RELEASE, - }, - { - 'pattern': 'Lib/%s/um/x86/**' % SDK_RELEASE, - }, - { - 'pattern': 'Redist/D3D/**', - }, - { - 'pattern': 'Redist/ucrt/DLLs/x64/**', - }, - { - 'pattern': 'Redist/ucrt/DLLs/x86/**', + 'srcdir': '%(sdk_path)s', + 'dstdir': 'SDK', + 'files': [ + { + 'pattern': 'bin/%s/x64/**' % SDK_RELEASE, + }, + { + 'pattern': 'Include/%s/**' % SDK_RELEASE, + }, + { + 'pattern': 'Lib/%s/ucrt/x64/**' % SDK_RELEASE, + }, + { + 'pattern': 'Lib/%s/ucrt/x86/**' % SDK_RELEASE, + }, + { + 'pattern': 'Lib/%s/um/x64/**' % SDK_RELEASE, + }, + { + 'pattern': 'Lib/%s/um/x86/**' % SDK_RELEASE, + }, + { + 'pattern': 'Redist/D3D/**', + }, + { + 'pattern': 'Redist/ucrt/DLLs/x64/**', + }, + { + 'pattern': 'Redist/ucrt/DLLs/x86/**', + }, + ], }, ] @@ -128,9 +143,9 @@ def find_vs_paths(): raise Exception('No "ProgramFiles(x86)" environment variable. ' 'Not running on 64-bit Windows?') - vs_path = os.path.join(pf, 'Microsoft Visual Studio 14.0') + vs_path = os.path.join(pf, 'Microsoft Visual Studio', '2017', 'Community') if not os.path.exists(vs_path): - raise Exception('%s does not exist; Visual Studio 2015 not installed?' % + raise Exception('%s does not exist; Visual Studio 2017 not installed?' % vs_path) sdk_path = os.path.join(pf, 'Windows Kits', '10') @@ -138,6 +153,11 @@ def find_vs_paths(): raise Exception('%s does not exist; Windows 10 SDK not installed?' % sdk_path) + sdk_fullver_path = os.path.join(sdk_path, 'Include', SDK_RELEASE) + if not os.path.exists(sdk_fullver_path): + raise Exception('%s does not exist; Wrong SDK version installed?' % + sdk_fullver_path) + return vs_path, sdk_path @@ -149,20 +169,16 @@ def resolve_files(): """ vs_path, sdk_path = find_vs_paths() - for entry in VS_PATTERNS: - finder = FileFinder(vs_path, ignore=entry.get('ignore', [])) - for p, f in finder.find(entry['pattern']): - assert p.startswith(('VC/', 'DIA SDK/')) - - yield p.encode('utf-8'), f - - for entry in SDK_PATTERNS: - finder = FileFinder(sdk_path, ignore=entry.get('ignore', [])) - for p, f in finder.find(entry['pattern']): - relpath = 'SDK/%s' % p - - yield relpath.encode('utf-8'), f - + for entry in PATTERNS: + fullpath = entry['srcdir'] % { + 'vs_path': vs_path, + 'sdk_path': sdk_path, + } + for pattern in entry['files']: + finder = FileFinder(fullpath, ignore=pattern.get('ignore', [])) + for p, f in finder.find(pattern['pattern']): + dstpath = '%s/%s' % (entry['dstdir'], p) + yield dstpath.encode('utf-8'), f def resolve_files_and_hash(manifest): """Resolve files and hash their data. @@ -201,7 +217,7 @@ def write_zip(zip_path, prefix=None): if isinstance(prefix, unicode): # noqa Special case for Python 2 prefix = prefix.encode('utf-8') - with JarWriter(file=zip_path, optimize=False, compress=5) as zip: + with JarWriter(file=zip_path, optimize=False, compress_level=5) as zip: manifest = {} for p, data, mode in resolve_files_and_hash(manifest): print(p) From a859e870fe46dfcc5e74db3634a7e2bc4af55607 Mon Sep 17 00:00:00 2001 From: ANDREEA PAVEL Date: Thu, 2 Nov 2017 18:06:58 +0200 Subject: [PATCH 20/33] Backed out changeset d3a0101e3936 (bug 1410132) for build failure ContainerParser.cpp:131 r=backout on a CLOSED TREE --- config/check_spidermonkey_style.py | 1 - js/public/Utility.h | 30 +++++++++------------------- js/src/jsapi-tests/testHashTable.cpp | 7 ++++--- js/src/jsapi-tests/tests.cpp | 1 - js/src/jsapi-tests/tests.h | 1 - js/src/jsstr.cpp | 13 +----------- js/src/jsutil.cpp | 14 ------------- js/src/shell/js.cpp | 18 +++++++---------- js/src/vm/Initialization.cpp | 5 ----- js/src/wasm/WasmProcess.cpp | 13 ------------ js/src/wasm/WasmProcess.h | 3 --- 11 files changed, 21 insertions(+), 85 deletions(-) diff --git a/config/check_spidermonkey_style.py b/config/check_spidermonkey_style.py index 22d26529436d..8769b441d2e9 100644 --- a/config/check_spidermonkey_style.py +++ b/config/check_spidermonkey_style.py @@ -69,7 +69,6 @@ included_inclnames_to_ignore = set([ 'jscustomallocator.h', # provided by embedders; allowed to be missing 'js-config.h', # generated in $OBJDIR 'fdlibm.h', # fdlibm - 'mozmemory.h', # included without a path 'pratom.h', # NSPR 'prcvar.h', # NSPR 'prerror.h', # NSPR diff --git a/js/public/Utility.h b/js/public/Utility.h index 93ee414495e0..a2c53e4832fb 100644 --- a/js/public/Utility.h +++ b/js/public/Utility.h @@ -26,8 +26,6 @@ #include "jstypes.h" -#include "mozmemory.h" - /* The public JS engine namespace. */ namespace JS {} @@ -366,33 +364,22 @@ struct MOZ_RAII JS_PUBLIC_DATA(AutoEnterOOMUnsafeRegion) } /* namespace js */ -// Malloc allocation. - -namespace js { - -extern JS_PUBLIC_DATA(arena_id_t) MallocArena; - -extern void InitMallocAllocator(); -extern void ShutDownMallocAllocator(); - -} /* namespace js */ - static inline void* js_malloc(size_t bytes) { JS_OOM_POSSIBLY_FAIL(); - return moz_arena_malloc(js::MallocArena, bytes); + return malloc(bytes); } static inline void* js_calloc(size_t bytes) { JS_OOM_POSSIBLY_FAIL(); - return moz_arena_calloc(js::MallocArena, bytes, 1); + return calloc(bytes, 1); } static inline void* js_calloc(size_t nmemb, size_t size) { JS_OOM_POSSIBLY_FAIL(); - return moz_arena_calloc(js::MallocArena, nmemb, size); + return calloc(nmemb, size); } static inline void* js_realloc(void* p, size_t bytes) @@ -403,18 +390,19 @@ static inline void* js_realloc(void* p, size_t bytes) MOZ_ASSERT(bytes != 0); JS_OOM_POSSIBLY_FAIL(); - return moz_arena_realloc(js::MallocArena, p, bytes); + return realloc(p, bytes); } static inline void js_free(void* p) { - // TODO: This should call |moz_arena_free(js::MallocArena, p)| but we - // currently can't enforce that all memory freed here was allocated by - // js_malloc(). free(p); } -JS_PUBLIC_API(char*) js_strdup(const char* s); +static inline char* js_strdup(const char* s) +{ + JS_OOM_POSSIBLY_FAIL(); + return strdup(s); +} #endif/* JS_USE_CUSTOM_ALLOCATOR */ #include diff --git a/js/src/jsapi-tests/testHashTable.cpp b/js/src/jsapi-tests/testHashTable.cpp index 35cf6b6370da..7919cf5b13df 100644 --- a/js/src/jsapi-tests/testHashTable.cpp +++ b/js/src/jsapi-tests/testHashTable.cpp @@ -394,13 +394,12 @@ END_TEST(testHashMapLookupWithDefaultOOM) BEGIN_TEST(testHashTableMovableEnum) { - IntSet set; CHECK(set.init()); // Exercise returning a hash table Enum object from a function. CHECK(set.put(1)); - for (auto e = enumerateSet(set); !e.empty(); e.popFront()) + for (auto e = enumerateSet(); !e.empty(); e.popFront()) e.removeFront(); CHECK(set.count() == 0); @@ -426,7 +425,9 @@ BEGIN_TEST(testHashTableMovableEnum) return true; } -IntSet::Enum enumerateSet(IntSet& set) +IntSet set; + +IntSet::Enum enumerateSet() { return IntSet::Enum(set); } diff --git a/js/src/jsapi-tests/tests.cpp b/js/src/jsapi-tests/tests.cpp index 6affbde9f9a8..5671f161ea9a 100644 --- a/js/src/jsapi-tests/tests.cpp +++ b/js/src/jsapi-tests/tests.cpp @@ -45,7 +45,6 @@ void JSAPITest::uninit() destroyContext(); cx = nullptr; } - msgs.clear(); } bool JSAPITest::exec(const char* bytes, const char* filename, int lineno) diff --git a/js/src/jsapi-tests/tests.h b/js/src/jsapi-tests/tests.h index a9e0f24795e7..d580ad134fce 100644 --- a/js/src/jsapi-tests/tests.h +++ b/js/src/jsapi-tests/tests.h @@ -33,7 +33,6 @@ class JSAPITestString { const char* begin() const { return chars.begin(); } const char* end() const { return chars.end(); } size_t length() const { return chars.length(); } - void clear() { chars.clearAndFree(); } JSAPITestString& operator +=(const char* s) { if (!chars.append(s, strlen(s))) diff --git a/js/src/jsstr.cpp b/js/src/jsstr.cpp index 700ea1e037fc..7fde0b04463e 100644 --- a/js/src/jsstr.cpp +++ b/js/src/jsstr.cpp @@ -3868,12 +3868,7 @@ js::DuplicateString(JSContext* cx, const char16_t* s) UniqueChars js::DuplicateString(const char* s) { - size_t n = strlen(s) + 1; - UniqueChars ret(js_pod_malloc(n)); - if (!ret) - return ret; - PodCopy(ret.get(), s, n); - return ret; + return UniqueChars(js_strdup(s)); } UniqueChars @@ -3904,12 +3899,6 @@ js::DuplicateString(const char16_t* s, size_t n) return ret; } -JS_PUBLIC_API(char*) -js_strdup(const char* s) -{ - return DuplicateString(s).release(); -} - template const CharT* js_strchr_limit(const CharT* s, char16_t c, const CharT* limit) diff --git a/js/src/jsutil.cpp b/js/src/jsutil.cpp index ffa095eee8b8..a973a7f39101 100644 --- a/js/src/jsutil.cpp +++ b/js/src/jsutil.cpp @@ -170,20 +170,6 @@ ResetSimulatedInterrupt() } // namespace js #endif // defined(DEBUG) || defined(JS_OOM_BREAKPOINT) -JS_PUBLIC_DATA(arena_id_t) js::MallocArena; - -void -js::InitMallocAllocator() -{ - MallocArena = moz_create_arena(); -} - -void -js::ShutDownMallocAllocator() -{ - moz_dispose_arena(MallocArena); -} - JS_PUBLIC_API(void) JS_Assert(const char* s, const char* file, int ln) { diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 498d3ba136a0..08020fdf536f 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -3992,8 +3992,6 @@ KillWorkerThreads(JSContext* cx) thread->join(); } - workerThreads.clearAndFree(); - js_delete(workerThreadsLock); workerThreadsLock = nullptr; @@ -4929,12 +4927,12 @@ NestedShell(JSContext* cx, unsigned argc, Value* vp) JS_ReportErrorNumberASCII(cx, my_GetErrorMessage, nullptr, JSSMSG_NESTED_FAIL); return false; } - if (!argv.append(js_strdup(sArgv[0]))) + if (!argv.append(strdup(sArgv[0]))) return false; // Propagate selected flags from the current shell for (unsigned i = 0; i < sPropagatedFlags.length(); i++) { - char* cstr = js_strdup(sPropagatedFlags[i]); + char* cstr = strdup(sPropagatedFlags[i]); if (!cstr || !argv.append(cstr)) return false; } @@ -5755,7 +5753,6 @@ ShutdownBufferStreams() state->shutdown = true; while (!state->jobs.empty()) state.wait(/* jobs empty */); - state->jobs.clearAndFree(); } static bool @@ -8655,12 +8652,6 @@ main(int argc, char** argv, char** envp) SetOutputFile("JS_STDOUT", &rcStdout, &gOutFile); SetOutputFile("JS_STDERR", &rcStderr, &gErrFile); - // Start the engine. - if (!JS_Init()) - return 1; - - auto shutdownEngine = MakeScopeExit([]() { JS_ShutDown(); }); - OptionParser op("Usage: {progname} [options] [[script] scriptArgs*]"); op.setDescription("The SpiderMonkey shell provides a command line interface to the " @@ -8884,6 +8875,10 @@ main(int argc, char** argv, char** envp) if (op.getBoolOption("no-threads")) js::DisableExtraThreads(); + // Start the engine. + if (!JS_Init()) + return 1; + if (!InitSharedArrayBufferMailbox()) return 1; @@ -8984,5 +8979,6 @@ main(int argc, char** argv, char** envp) DestructSharedArrayBufferMailbox(); JS_DestroyContext(cx); + JS_ShutDown(); return result; } diff --git a/js/src/vm/Initialization.cpp b/js/src/vm/Initialization.cpp index 1b035a67e004..3ef67db836ff 100644 --- a/js/src/vm/Initialization.cpp +++ b/js/src/vm/Initialization.cpp @@ -100,8 +100,6 @@ JS::detail::InitWithFailureDiagnostic(bool isDebugBuild) RETURN_IF_FAIL(js::oom::InitThreadType()); #endif - js::InitMallocAllocator(); - RETURN_IF_FAIL(js::Mutex::Init()); RETURN_IF_FAIL(js::wasm::InitInstanceStaticData()); @@ -172,7 +170,6 @@ JS_ShutDown(void) js::MemoryProtectionExceptionHandler::uninstall(); js::wasm::ShutDownInstanceStaticData(); - js::wasm::ShutDownProcessStaticData(); js::Mutex::ShutDown(); @@ -202,8 +199,6 @@ JS_ShutDown(void) js::jit::ReleaseProcessExecutableMemory(); } - js::ShutDownMallocAllocator(); - libraryInitState = InitState::ShutDown; } diff --git a/js/src/wasm/WasmProcess.cpp b/js/src/wasm/WasmProcess.cpp index 9a9920bdb22a..afc378eac189 100644 --- a/js/src/wasm/WasmProcess.cpp +++ b/js/src/wasm/WasmProcess.cpp @@ -126,13 +126,6 @@ class ProcessCodeSegmentMap MOZ_ASSERT(segments2_.empty()); } - void freeAll() { - MOZ_ASSERT(segments1_.empty()); - MOZ_ASSERT(segments2_.empty()); - segments1_.clearAndFree(); - segments2_.clearAndFree(); - } - bool insert(const CodeSegment* cs) { LockGuard lock(mutatorsMutex_); @@ -237,9 +230,3 @@ wasm::LookupCode(const void* pc) const CodeSegment* found = LookupCodeSegment(pc); return found ? found->code() : nullptr; } - -void -wasm::ShutDownProcessStaticData() -{ - processCodeSegmentMap.freeAll(); -} diff --git a/js/src/wasm/WasmProcess.h b/js/src/wasm/WasmProcess.h index d5b125a1fd35..08d25d9adfc7 100644 --- a/js/src/wasm/WasmProcess.h +++ b/js/src/wasm/WasmProcess.h @@ -51,9 +51,6 @@ RegisterCodeSegment(const CodeSegment* cs); void UnregisterCodeSegment(const CodeSegment* cs); -void -ShutDownProcessStaticData(); - } // namespace wasm } // namespace js From 270d55d17d7977cd6a13f0e2bdefd064f66dd46d Mon Sep 17 00:00:00 2001 From: ANDREEA PAVEL Date: Thu, 2 Nov 2017 18:09:15 +0200 Subject: [PATCH 21/33] Backed out changeset 35fc92e75cf7 (bug 1412007) for failing broswer-chrome browser_bug676619.js r=backout on a CLOSED TREE --- netwerk/protocol/http/HttpChannelChild.cpp | 46 ++++++---------------- netwerk/protocol/http/HttpChannelChild.h | 34 ++-------------- 2 files changed, 16 insertions(+), 64 deletions(-) diff --git a/netwerk/protocol/http/HttpChannelChild.cpp b/netwerk/protocol/http/HttpChannelChild.cpp index 86de3d7925f4..18b9fe2de1db 100644 --- a/netwerk/protocol/http/HttpChannelChild.cpp +++ b/netwerk/protocol/http/HttpChannelChild.cpp @@ -173,7 +173,7 @@ HttpChannelChild::HttpChannelChild() , mKeptAlive(false) , mUnknownDecoderInvolved(false) , mDivertingToParent(false) - , mFlushedForDiversion(eNotFlushed) + , mFlushedForDiversion(false) , mSuspendSent(false) , mSynthesizedResponse(false) , mShouldInterceptSubsequentRedirect(false) @@ -493,7 +493,7 @@ HttpChannelChild::RecvOnStartRequest(const nsresult& channelStatus, LOG(("HttpChannelChild::RecvOnStartRequest [this=%p]\n", this)); // mFlushedForDiversion and mDivertingToParent should NEVER be set at this // stage, as they are set in the listener's OnStartRequest. - MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, + MOZ_RELEASE_ASSERT(!mFlushedForDiversion, "mFlushedForDiversion should be unset before OnStartRequest!"); MOZ_RELEASE_ASSERT(!mDivertingToParent, "mDivertingToParent should be unset before OnStartRequest!"); @@ -554,7 +554,7 @@ HttpChannelChild::OnStartRequest(const nsresult& channelStatus, // mFlushedForDiversion and mDivertingToParent should NEVER be set at this // stage, as they are set in the listener's OnStartRequest. - MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, + MOZ_RELEASE_ASSERT(!mFlushedForDiversion, "mFlushedForDiversion should be unset before OnStartRequest!"); MOZ_RELEASE_ASSERT(!mDivertingToParent, "mDivertingToParent should be unset before OnStartRequest!"); @@ -615,6 +615,8 @@ HttpChannelChild::OnStartRequest(const nsresult& channelStatus, DoOnStartRequest(this, mListenerContext); } +namespace { + class SyntheticDiversionListener final : public nsIStreamListener { RefPtr mChannel; @@ -642,7 +644,6 @@ public: nsresult aStatus) override { mChannel->SendDivertOnStopRequest(aStatus); - mChannel->MaybeSendDivertComplete(); return NS_OK; } @@ -667,6 +668,8 @@ public: NS_IMPL_ISUPPORTS(SyntheticDiversionListener, nsIStreamListener); +} // anonymous namespace + void HttpChannelChild::DoOnStartRequest(nsIRequest* aRequest, nsISupports* aContext) { @@ -766,7 +769,7 @@ HttpChannelChild::ProcessOnTransportAndData(const nsresult& aChannelStatus, { LOG(("HttpChannelChild::ProcessOnTransportAndData [this=%p]\n", this)); MOZ_ASSERT(OnSocketThread()); - MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, + MOZ_RELEASE_ASSERT(!mFlushedForDiversion, "Should not be receiving any more callbacks from parent!"); mEventQ->RunOrEnqueue(new TransportAndDataEvent(this, aChannelStatus, aTransportStatus, aData, @@ -825,7 +828,7 @@ HttpChannelChild::OnTransportAndData(const nsresult& channelStatus, // For diversion to parent, just SendDivertOnDataAvailable. if (mDivertingToParent) { MOZ_ASSERT(NS_IsMainThread()); - MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, + MOZ_RELEASE_ASSERT(!mFlushedForDiversion, "Should not be processing any more callbacks from parent!"); SendDivertOnDataAvailable(data, offset, count); @@ -994,7 +997,7 @@ HttpChannelChild::ProcessOnStopRequest(const nsresult& aChannelStatus, { LOG(("HttpChannelChild::ProcessOnStopRequest [this=%p]\n", this)); MOZ_ASSERT(OnSocketThread()); - MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, + MOZ_RELEASE_ASSERT(!mFlushedForDiversion, "Should not be receiving any more callbacks from parent!"); mEventQ->RunOrEnqueue(new StopRequestEvent(this, aChannelStatus, aTiming), @@ -1028,27 +1031,9 @@ HttpChannelChild::MaybeDivertOnStop(const nsresult& aChannelStatus) static_cast(aChannelStatus))); if (mDivertingToParent) { SendDivertOnStopRequest(aChannelStatus); - MaybeSendDivertComplete(); } } -void -HttpChannelChild::MaybeSendDivertComplete() -{ - if (mFlushedForDiversion == eNotFlushed) { - mFlushedForDiversion = eReadyToBeFlushed; - return; - } - - if (mFlushedForDiversion == ePendingToBeFlushed) { - mFlushedForDiversion = eFlushed; - SendDivertComplete(); - return; - } - - MOZ_CRASH("We should not be already in this state!"); -} - void HttpChannelChild::OnStopRequest(const nsresult& channelStatus, const ResourceTimingStruct& timing) @@ -1058,11 +1043,10 @@ HttpChannelChild::OnStopRequest(const nsresult& channelStatus, MOZ_ASSERT(NS_IsMainThread()); if (mDivertingToParent) { - MOZ_RELEASE_ASSERT(mFlushedForDiversion == eNotFlushed, + MOZ_RELEASE_ASSERT(!mFlushedForDiversion, "Should not be processing any more callbacks from parent!"); SendDivertOnStopRequest(channelStatus); - MaybeSendDivertComplete(); return; } @@ -1862,13 +1846,9 @@ HttpChannelChild::FlushedForDiversion() // Once this is set, it should not be unset before HttpChannelChild is taken // down. After it is set, no OnStart/OnData/OnStop callbacks should be // received from the parent channel, nor dequeued from the ChannelEventQueue. + mFlushedForDiversion = true; - if (mFlushedForDiversion == eReadyToBeFlushed) { - mFlushedForDiversion = eFlushed; - SendDivertComplete(); - } else { - mFlushedForDiversion = ePendingToBeFlushed; - } + SendDivertComplete(); } void diff --git a/netwerk/protocol/http/HttpChannelChild.h b/netwerk/protocol/http/HttpChannelChild.h index ee8de0b2ea1a..d83aa244eb1f 100644 --- a/netwerk/protocol/http/HttpChannelChild.h +++ b/netwerk/protocol/http/HttpChannelChild.h @@ -319,31 +319,9 @@ private: // Once set, OnData and possibly OnStop will be diverted to the parent. Atomic mDivertingToParent; - - enum FlushedForDiversionEnum { - // This is the initial state. - eNotFlushed, - - // This is set when SendOnStopRequest() is called and the previous state was - // eNotFlushed. FlushedForDiversion() has not been called yet, but when, - // eventually, it will be, SendDivertComplete() can immediately called. - eReadyToBeFlushed, - - // This is set by FlushedForDiversion() when SetOnStopRequest() has not been - // called yet. When finally SetOnStopRequest() will be called, - // SendDivertComplete() will be executed as well. - ePendingToBeFlushed, - - // This is the final step. No OnStart/OnData/OnStop callbacks should be - // received from the parent channel, nor dequeued from the - // ChannelEventQueue. - eFlushed, - }; - - // Atomic becuase it can be touched onSocketThread() for debugging reasons - // only. - Atomic mFlushedForDiversion; - + // Once set, no OnStart/OnData/OnStop callbacks should be received from the + // parent channel, nor dequeued from the ChannelEventQueue. + Atomic mFlushedForDiversion; // Set if SendSuspend is called. Determines if SendResume is needed when // diverting callbacks to parent. bool mSuspendSent; @@ -462,11 +440,6 @@ private: // Collect telemetry for the successful rate of OMT. void CollectOMTTelemetry(); - // When SendDivertOnStopRequest() is called, this method is used to check - // mFlushedForDiversion and maybe call SendDivertComplete(). See - // mFlushedForDiversion state. - void MaybeSendDivertComplete(); - // The result of RetargetDeliveryTo for this channel. // |notRequested| represents OMT is not requested by the channel owner. LABELS_HTTP_CHILD_OMT_STATS mOMTResult = LABELS_HTTP_CHILD_OMT_STATS::notRequested; @@ -479,7 +452,6 @@ private: friend class MaybeDivertOnStopHttpEvent; friend class ProgressEvent; friend class StatusEvent; - friend class SyntheticDiversionListener; friend class FailedAsyncOpenEvent; friend class Redirect1Event; friend class Redirect3Event; From d1b5874cb8b611b365fd6bf2531954f11df22ea7 Mon Sep 17 00:00:00 2001 From: Matt Howell Date: Thu, 2 Nov 2017 08:34:22 -0700 Subject: [PATCH 22/33] Bug 1413568 - Update installer icons. r=mconley MozReview-Commit-ID: 1KJWrbZGglW --HG-- extra : rebase_source : f7c4326f24ad69c6292d6f11f5ff78c429673702 extra : source : ea75679760e608a7f3298f595b42dc13ec8bf890 --- other-licenses/7zstub/firefox/7zSD.sfx | Bin 182784 -> 209408 bytes .../src/7zip/Bundles/SFXSetup-moz/setup.ico | Bin 25214 -> 58730 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/other-licenses/7zstub/firefox/7zSD.sfx b/other-licenses/7zstub/firefox/7zSD.sfx index 0880e7669b437df9a43820be48d9c1915339e12b..fd4e7acf42604a2503e2943072de293936b8dfe6 100644 GIT binary patch delta 55808 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 No&W#@x6Q!c)= delta 26836 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%0Aoh*lOHQeNX>I}~NrJ>?o&Y)b))39o6@+QqlL}PM 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 K<_lZlX#8KQD7yRr diff --git a/other-licenses/7zstub/src/7zip/Bundles/SFXSetup-moz/setup.ico b/other-licenses/7zstub/src/7zip/Bundles/SFXSetup-moz/setup.ico index 9801fed54fbaf217537693e628497a5002d20a77..794f23d5c06c37d64ac0d2f8909a7b17adcb8289 100644 GIT binary patch literal 58730 zcmeEubyyZ#^zKJ0h=3rV($XcRbfY36C?X}PB8rrBhY|*Yih@enq9PzjH;9y!loHaR zlG3^F-XDA(?UV9RPd++Z;9x{ZH|Y%FF6 zxH*6-A2&F>hYuVP-UE(_3IPvIHQ>2UboPk=ZP<>^qkgFW0WS6jhj_UP4-4{R&*_Tq z1qPC0;DnSoxOhzK7cr8Sz_z3Fx?-Z({%iW`j>BU^*pB*`$VdV+St)Q?Px}`!my^b} zqw}aA8s|8~gvK(2`ix~Hu;)+8OM}x2vf#SmaVWY!<&2^%Y?lG(JR08^j)AU2deJ^= zJ0&jzP`|TE^5CYi{x4#+Ujf^W&ZB;~F%VZ%SxM};7Vz9TWqDwIKoQ(AHT*?v4=Mrc z{fgKzEFivdWIPCVzX>jThk{$~{@}UQNf4ra z5FESl5NHO)1I^%gpnD}ATro0Sbdx#o=sZaoP+%Gbg1nP}M{)vCn*+e%Q3-gimjms~ z_duxuBS=vu21?H#0Zb+Un0x?O-UDE4>X__{N!xL1YYmWModkTsQ(&+7J0Pu*4xT6o zfpYcj;EMq<7&(gp4W<}yFeM&fvH+m10f4_A0QzUZ0bWmGMo|wWc25INaR3-}et_*Z zU%?TV`=DKa6PU2YfJI*nXm`K>g2E+0{TTr94gkd30N9lQWZ?A#C&}x8Bc7SfTRQjt-luS!#NZ}+smx7M;-|6smoSm1P$6- z!MD>GAX?Uhy0gjwvSD52rS8s1KEvzH?9Z& zza67>k_Cza6tsR~|KJ+C@lTPR6{En$LJ8#o6rjwp8?ArfAP*;iYameL=K<;hyg&o4 zjc7e|Qau2ik*FQ~v%q#u*a!7P{n2%3Jw@XjglqABIIa>Le@z$CiGjM1eg)Ky∾t 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

    KML<$1p6SUkq~Ci*w@>M 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 KMNUMnLSTXz9NK;W literal 25214 zcmeIacU)Ch6E-@C22<5H#y7@Tg1y9&*b+6?C>l#*i8aR9dyEaNphm$4R_r1wph&Y( zL=rgjLx8J#}3-^cyCD**_)^ha6lHJS@eTS2tLZ+*Znae!hbR`QAhZT zNAmIUA)m)SlpADAHEY(S+O=!bM<0De_3G851`Qg}mtTHK^nv{e{3o(AT#f&vXJlq* zXk>Uo&q&|!ppofn#7kEhnMrKe+TIXx7em9<2N8d2WVCTB;#G!brma!_zyUK;slRHK zq2UQ>#|+Jpo*@EaLsP`tPLL7OjZ9CFBpVtM#hU_8U7(IJR!9&ss)M9Uz8;{C8VJt{ z;9bV48K56PJ5DB;v)2a`G=LlojuPQ79swrGSP`-EpP1zdfPa!Ce_jcOhD)la>6w<8 zN(#nLNj5S?HB&<)vyu{!NP1@SZf0a|VPU~2hWC=z7>cyCk`gXfzw7I_wl_xsE?J`F z>+8?AKa-Y*dM288BYS&uyrP2CZ>Mi$X3u8KCF=K+Co#AsWWg3@l5gIwxsjPgu34Ru zk`j4OJLzFmQiAtNb$;5BBgW{AEP#Vj-b3=aQlCmR9TB_-SJ6?{`tva^jOf7=;_p2Y~MAg09Zgz_FoDJdz2px;D29>y5e#fz0y zpyUf-gfgizu6kI8hG<&t06hR@(v7UOGON^Ow^?W#vsIL!EQxl>( z06l=N26Pa=4YcK?j?|Sl1lhhCkY^Skq-z21#_aP4%R282mf*m)e-VV&ur9Y<_Kq zsWPpMoZ6|W#l^*%jN0ny=3+x5^Y!bEjWKT~>SomC4Gm3G5ioyjRF!UK%$RW}b$N9K zr5%0!Hl}9wcAD}^1x>oX{x*C2^-=*1l?ZOquRbau9TlW~rJ<_y)%H?BipxG!mv7fj zzl|X>?37dmBc=SwllpT(s=cu~y%?A(=_oHlV95B-piP^O@}?L9V~`4Zi;IC!Re2OM zF4ilq^Sr!y<;jz$q&yev8Dha#mCtEs?_sJgZ=_ef{JA4Xl=48_v>3!`+RyRu@Gw(G zpxDs362z(TF|RywN2 z(!pO4vdyG8I*{T@x^N(vGQ`R1`xU z6LoQE9~@X66wXqWE=Qf2sqsshwT�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 Date: Thu, 2 Nov 2017 16:31:45 +0000 Subject: [PATCH 23/33] Bug 1405738 - Enable the JavaScript Start-up Bytecode Cache. r=mrbkap --- modules/libpref/init/all.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index 5b0dd89b7fc7..95d659a9540d 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -209,7 +209,7 @@ pref("dom.compartment_per_addon", true); // execution to record the bytecode of the JavaScript function used, and save it // in the existing cache entry. On the following loads of the same script, the // bytecode would be loaded from the cache instead of being generated once more. -pref("dom.script_loader.bytecode_cache.enabled", false); +pref("dom.script_loader.bytecode_cache.enabled", true); // Ignore the heuristics of the bytecode cache, and always record on the first // visit. (used for testing purposes). From af86a58b157fbed26b0e86fcd81f1b421e80e60a Mon Sep 17 00:00:00 2001 From: ffxbld Date: Thu, 2 Nov 2017 16:47:50 +0000 Subject: [PATCH 24/33] No bug - Tagging mozilla-central 40a14ca1cf04499f398e4cb8ba359b39eae4e216 with FIREFOX_BETA_58_BASE a=release DONTBUILD CLOSED TREE --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index c7282d8df651..92abb4660c67 100644 --- a/.hgtags +++ b/.hgtags @@ -136,3 +136,4 @@ f9605772a0c9098ed1bcaa98089b2c944ed69e9b FIREFOX_BETA_55_BASE 320642944e42a889db13c6c55b404e32319d4de6 FIREFOX_BETA_56_BASE 8e818b5e9b6bef0fc1a5c527ecf30b0d56a02f14 FIREFOX_BETA_57_BASE f7e9777221a34f9f23c2e4933307eb38b621b679 FIREFOX_NIGHTLY_57_END +40a14ca1cf04499f398e4cb8ba359b39eae4e216 FIREFOX_BETA_58_BASE From 51db54b5e18a4a9b688a639763d35bd30638e3e8 Mon Sep 17 00:00:00 2001 From: Jim Mathies Date: Thu, 2 Nov 2017 12:01:54 -0500 Subject: [PATCH 25/33] Bug 1413599 - Update the 'switch to ESR' prompt minimum version check to include JAWS versions 19 and lower. r=davidb --- accessible/windows/msaa/Compatibility.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accessible/windows/msaa/Compatibility.cpp b/accessible/windows/msaa/Compatibility.cpp index e3d6715f8850..fe180f6397d3 100644 --- a/accessible/windows/msaa/Compatibility.cpp +++ b/accessible/windows/msaa/Compatibility.cpp @@ -168,7 +168,7 @@ Compatibility::Init() HMODULE jawsHandle = ::GetModuleHandleW(L"jhook"); if (jawsHandle) - sConsumers |= (IsModuleVersionLessThan(jawsHandle, 18, 4315)) ? + sConsumers |= (IsModuleVersionLessThan(jawsHandle, 20, 0)) ? OLDJAWS : JAWS; if (::GetModuleHandleW(L"gwm32inc")) From 54520c6d31ea100a876556ab7f0a62ecdbd8fa6b Mon Sep 17 00:00:00 2001 From: Jim Mathies Date: Thu, 2 Nov 2017 12:01:54 -0500 Subject: [PATCH 26/33] Bug 1413599 - Disable the JAWS compatibility prompt in Nightly builds for testing. r=felipe --- browser/components/nsBrowserGlue.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/browser/components/nsBrowserGlue.js b/browser/components/nsBrowserGlue.js index c0855e94f1d5..c25fe2ab07cb 100644 --- a/browser/components/nsBrowserGlue.js +++ b/browser/components/nsBrowserGlue.js @@ -2917,9 +2917,11 @@ var JawsScreenReaderVersionCheck = { _checkVersionAndPrompt() { // Make sure we only prompt for versions of JAWS we do not - // support and never prompt if e10s is disabled. + // support and never prompt if e10s is disabled or if we're on + // nightly. if (!Services.appinfo.shouldBlockIncompatJaws || - !Services.appinfo.browserTabsRemoteAutostart) { + !Services.appinfo.browserTabsRemoteAutostart || + AppConstants.NIGHTLY_BUILD) { return; } From 0bbe6f49405df0d103c676b5219e24da6b015511 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Thu, 2 Nov 2017 13:02:55 -0400 Subject: [PATCH 27/33] Bug 1412741. Back out the fix for bug 1381408, because that change doesn't look like it's web-compatible. r=peterv MozReview-Commit-ID: LSYYAt0bAkT --- .../tests/mochitest/test_bug862380.html | 23 ++++--------------- js/xpconnect/wrappers/FilteringWrapper.cpp | 5 ++-- .../cross-origin-objects.html.ini | 10 ++++++++ 3 files changed, 18 insertions(+), 20 deletions(-) create mode 100644 testing/web-platform/meta/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini diff --git a/js/xpconnect/tests/mochitest/test_bug862380.html b/js/xpconnect/tests/mochitest/test_bug862380.html index 0f1611776320..0d3fb7329358 100644 --- a/js/xpconnect/tests/mochitest/test_bug862380.html +++ b/js/xpconnect/tests/mochitest/test_bug862380.html @@ -13,29 +13,16 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=862380 /** Test for Bug 862380 **/ SimpleTest.waitForExplicitFinish(); function go() { - checkNotEnumerable($('ifr').contentWindow, true); - checkNotEnumerable($('ifr').contentWindow.location, false); + checkNotEnumerable($('ifr').contentWindow); + checkNotEnumerable($('ifr').contentWindow.location); SimpleTest.finish(); } -function checkNotEnumerable(obj, isWindow) { + function checkNotEnumerable(obj) { try { - const expectedWindow = ["0", "window", "location", "top", "close", - "focus", "blur", "postMessage", "self", "closed", - "frames", "length", "opener", "parent"]; - const expectedLocation = ["replace", "href"]; - const expected = isWindow ? expectedWindow : expectedLocation; - is(Object.keys(obj).length, expected.length, - "Object.keys gives right array length"); - var actual = []; + is(Object.keys(obj).length, 0, "Object.keys gives empty array"); for (var i in obj) - actual.push(i); - is(actual.length, expected.length, - "Enumeration sees the right number of props"); - actual.sort(); - expected.sort(); - for (var i = 0; i < actual.length; ++i) - is(actual[i], expected[i], "Arrays should be the same " + i); + ok(false, "Enumerated something: " + i); } catch (e) { ok(false, "threw: " + e); } diff --git a/js/xpconnect/wrappers/FilteringWrapper.cpp b/js/xpconnect/wrappers/FilteringWrapper.cpp index c35c3e896afc..1e986c734cde 100644 --- a/js/xpconnect/wrappers/FilteringWrapper.cpp +++ b/js/xpconnect/wrappers/FilteringWrapper.cpp @@ -223,8 +223,9 @@ CrossOriginXrayWrapper::getPropertyDescriptor(JSContext* cx, // All properties on cross-origin DOM objects are |own|. desc.object().set(wrapper); - // All properties on cross-origin DOM objects are "configurable". Any - // value attributes are read-only. + // All properties on cross-origin DOM objects are non-enumerable and + // "configurable". Any value attributes are read-only. + desc.attributesRef() &= ~JSPROP_ENUMERATE; desc.attributesRef() &= ~JSPROP_PERMANENT; if (!desc.getter() && !desc.setter()) desc.attributesRef() |= JSPROP_READONLY; diff --git a/testing/web-platform/meta/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini b/testing/web-platform/meta/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini new file mode 100644 index 000000000000..6c5e683863e9 --- /dev/null +++ b/testing/web-platform/meta/html/browsers/origin/cross-origin-objects/cross-origin-objects.html.ini @@ -0,0 +1,10 @@ +[cross-origin-objects.html] + type: testharness + [[[GetOwnProperty\]\] - Property descriptors for cross-origin properties should be set up correctly] + expected: FAIL + + [Can only enumerate safelisted properties] + expected: FAIL + + [[[OwnPropertyKeys\]\] should return all properties from cross-origin objects] + expected: FAIL From 0daa567ffa2e1ffcb854463b77c1ba532b32e5c9 Mon Sep 17 00:00:00 2001 From: Joel Maher Date: Thu, 2 Nov 2017 13:15:06 -0400 Subject: [PATCH 28/33] Bug 1385288 - Disable parser/htmlparser/tests/reftest/bug582940-1.html on osx for frequent failures. r=me, a=testonly --- parser/htmlparser/tests/reftest/reftest.list | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parser/htmlparser/tests/reftest/reftest.list b/parser/htmlparser/tests/reftest/reftest.list index 97d4fb708e1c..3b5fb4eaf4c0 100644 --- a/parser/htmlparser/tests/reftest/reftest.list +++ b/parser/htmlparser/tests/reftest/reftest.list @@ -4,7 +4,7 @@ == bug569229-1.xml bug569229-1-ref.xml == bug577418-1.html bug577418-1-ref.html == bug582788-1.html bug582788-1-ref.html -skip-if(OSX&&!isDebugBuild) fuzzy-if(skiaContent,2,5) == bug582940-1.html bug582940-1-ref.html +skip-if(OSX) fuzzy-if(skiaContent,2,5) == bug582940-1.html bug582940-1-ref.html == bug592656-1.html bug592656-1-ref.html fuzzy-if(skiaContent,1,5) == bug599320-1.html bug599320-1-ref.html fuzzy-if(skiaContent,2,5) == bug608373-1.html bug608373-1-ref.html From 2ad54c903fed3cf453443d121384fb9bd39e5c72 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Thu, 2 Nov 2017 18:29:27 +0100 Subject: [PATCH 29/33] Bug 1407678 - Make windows_toolchain.py support VS2017: enter empty line to make flake8 happy. r=linting-fix DONTBUILD --- build/windows_toolchain.py | 1 + 1 file changed, 1 insertion(+) diff --git a/build/windows_toolchain.py b/build/windows_toolchain.py index 58059ad23bd3..b670b42c02c8 100644 --- a/build/windows_toolchain.py +++ b/build/windows_toolchain.py @@ -180,6 +180,7 @@ def resolve_files(): dstpath = '%s/%s' % (entry['dstdir'], p) yield dstpath.encode('utf-8'), f + def resolve_files_and_hash(manifest): """Resolve files and hash their data. From 3c85b0dc4e4625ab66af40e658a48df26f27316e Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Thu, 2 Nov 2017 19:14:40 +0100 Subject: [PATCH 30/33] Bug 1413863 - Test for nsBufferedInputStream, r=smaug --- .../test/gtest/TestBufferedInputStream.cpp | 234 ++++++++++++++++++ netwerk/test/gtest/moz.build | 6 + 2 files changed, 240 insertions(+) create mode 100644 netwerk/test/gtest/TestBufferedInputStream.cpp diff --git a/netwerk/test/gtest/TestBufferedInputStream.cpp b/netwerk/test/gtest/TestBufferedInputStream.cpp new file mode 100644 index 000000000000..cd89e531ac9f --- /dev/null +++ b/netwerk/test/gtest/TestBufferedInputStream.cpp @@ -0,0 +1,234 @@ +#include "gtest/gtest.h" + +#include "nsBufferedStreams.h" +#include "nsCOMPtr.h" +#include "nsStreamUtils.h" +#include "nsString.h" +#include "nsStringStream.h" +#include "nsThreadUtils.h" +#include "Helpers.h" + +class AsyncStringStream final : public nsIAsyncInputStream +{ + nsCOMPtr mStream; + +public: + NS_DECL_THREADSAFE_ISUPPORTS + + explicit AsyncStringStream(const nsACString& aBuffer) + { + NS_NewCStringInputStream(getter_AddRefs(mStream), aBuffer); + } + + NS_IMETHOD + Available(uint64_t* aLength) override + { + return mStream->Available(aLength); + } + + NS_IMETHOD + Read(char* aBuffer, uint32_t aCount, uint32_t* aReadCount) override + { + return mStream->Read(aBuffer, aCount, aReadCount); + } + + NS_IMETHOD + ReadSegments(nsWriteSegmentFun aWriter, void* aClosure, + uint32_t aCount, uint32_t *aResult) override + { + return NS_ERROR_NOT_IMPLEMENTED; + } + + NS_IMETHOD + Close() override + { + nsresult rv = mStream->Close(); + if (NS_SUCCEEDED(rv)) { + MaybeExecCallback(mCallback, mCallbackEventTarget); + } + return rv; + } + + NS_IMETHOD + IsNonBlocking(bool* aNonBlocking) override + { + return mStream->IsNonBlocking(aNonBlocking); + } + + NS_IMETHOD + CloseWithStatus(nsresult aStatus) override + { + return Close(); + } + + NS_IMETHOD + AsyncWait(nsIInputStreamCallback* aCallback, + uint32_t aFlags, uint32_t aRequestedCount, + nsIEventTarget* aEventTarget) override + { + if (aFlags & nsIAsyncInputStream::WAIT_CLOSURE_ONLY) { + mCallback = aCallback; + mCallbackEventTarget = aEventTarget; + return NS_OK; + } + + MaybeExecCallback(aCallback, aEventTarget); + return NS_OK; + } + + void + MaybeExecCallback(nsIInputStreamCallback* aCallback, + nsIEventTarget* aEventTarget) + { + if (!aCallback) { + return; + } + + nsCOMPtr callback = aCallback; + nsCOMPtr self = this; + + nsCOMPtr r = NS_NewRunnableFunction( + "AsyncWait", [callback, self]() { callback->OnInputStreamReady(self); }); + + if (aEventTarget) { + aEventTarget->Dispatch(r.forget()); + } else { + r->Run(); + } + } + +private: + ~AsyncStringStream() = default; + + nsCOMPtr mCallback; + nsCOMPtr mCallbackEventTarget; +}; + +NS_IMPL_ISUPPORTS(AsyncStringStream, nsIAsyncInputStream, nsIInputStream) + +// Helper function for creating a AsyncStringStream +already_AddRefed +CreateStream(uint32_t aSize, nsCString& aBuffer) +{ + aBuffer.SetLength(aSize); + for (uint32_t i = 0; i < aSize; ++i) { + aBuffer.BeginWriting()[i] = i % 10; + } + + nsCOMPtr stream = new AsyncStringStream(aBuffer); + + RefPtr bis = new nsBufferedInputStream(); + bis->Init(stream, aSize); + return bis.forget(); +} + +// Simple reading. +TEST(TestBufferedInputStream, SimpleRead) { + const size_t kBufSize = 10; + + nsCString buf; + RefPtr bis = CreateStream(kBufSize, buf); + + uint64_t length; + ASSERT_EQ(NS_OK, bis->Available(&length)); + ASSERT_EQ((uint64_t)kBufSize, length); + + char buf2[kBufSize]; + uint32_t count; + ASSERT_EQ(NS_OK, bis->Read(buf2, sizeof(buf2), &count)); + ASSERT_EQ(count, buf.Length()); + ASSERT_TRUE(nsCString(buf.get(), kBufSize).Equals(nsCString(buf2, count))); +} + +// Simple segment reading. +TEST(TestBufferedInputStream, SimpleReadSegments) { + const size_t kBufSize = 10; + + nsCString buf; + RefPtr bis = CreateStream(kBufSize, buf); + + char buf2[kBufSize]; + uint32_t count; + ASSERT_EQ(NS_OK, bis->ReadSegments(NS_CopySegmentToBuffer, buf2, sizeof(buf2), &count)); + ASSERT_EQ(count, buf.Length()); + ASSERT_TRUE(nsCString(buf.get(), kBufSize).Equals(nsCString(buf2, count))); +} + +// AsyncWait - sync +TEST(TestBufferedInputStream, AsyncWait_sync) { + const size_t kBufSize = 10; + + nsCString buf; + RefPtr bis = CreateStream(kBufSize, buf); + + RefPtr cb = + new testing::InputStreamCallback(); + + ASSERT_EQ(NS_OK, bis->AsyncWait(cb, 0, 0, nullptr)); + + // Immediatelly called + ASSERT_TRUE(cb->Called()); +} + +// AsyncWait - async +TEST(TestBufferedInputStream, AsyncWait_async) { + const size_t kBufSize = 10; + + nsCString buf; + RefPtr bis = CreateStream(kBufSize, buf); + + RefPtr cb = + new testing::InputStreamCallback(); + nsCOMPtr thread = do_GetCurrentThread(); + + ASSERT_EQ(NS_OK, bis->AsyncWait(cb, 0, 0, thread)); + + ASSERT_FALSE(cb->Called()); + + // Eventually it is called. + MOZ_ALWAYS_TRUE(mozilla::SpinEventLoopUntil([&]() { return cb->Called(); })); + ASSERT_TRUE(cb->Called()); +} + +// AsyncWait - sync - closureOnly +TEST(TestBufferedInputStream, AsyncWait_sync_closureOnly) { + const size_t kBufSize = 10; + + nsCString buf; + RefPtr bis = CreateStream(kBufSize, buf); + + RefPtr cb = + new testing::InputStreamCallback(); + + ASSERT_EQ(NS_OK, bis->AsyncWait(cb, nsIAsyncInputStream::WAIT_CLOSURE_ONLY, + 0, nullptr)); + ASSERT_FALSE(cb->Called()); + + bis->CloseWithStatus(NS_ERROR_FAILURE); + + // Immediatelly called + ASSERT_TRUE(cb->Called()); +} + +// AsyncWait - async +TEST(TestBufferedInputStream, AsyncWait_async_closureOnly) { + const size_t kBufSize = 10; + + nsCString buf; + RefPtr bis = CreateStream(kBufSize, buf); + + RefPtr cb = + new testing::InputStreamCallback(); + nsCOMPtr thread = do_GetCurrentThread(); + + ASSERT_EQ(NS_OK, bis->AsyncWait(cb, nsIAsyncInputStream::WAIT_CLOSURE_ONLY, + 0, thread)); + + ASSERT_FALSE(cb->Called()); + bis->CloseWithStatus(NS_ERROR_FAILURE); + ASSERT_FALSE(cb->Called()); + + // Eventually it is called. + MOZ_ALWAYS_TRUE(mozilla::SpinEventLoopUntil([&]() { return cb->Called(); })); + ASSERT_TRUE(cb->Called()); +} diff --git a/netwerk/test/gtest/moz.build b/netwerk/test/gtest/moz.build index 95927269b2be..a2e2e4b00915 100644 --- a/netwerk/test/gtest/moz.build +++ b/netwerk/test/gtest/moz.build @@ -5,6 +5,7 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. UNIFIED_SOURCES += [ + 'TestBufferedInputStream.cpp', 'TestHeaders.cpp', 'TestHttpAuthUtils.cpp', 'TestMozURL.cpp', @@ -17,6 +18,11 @@ TEST_DIRS += [ 'parse-ftp', ] +LOCAL_INCLUDES += [ + '/netwerk/base', + '/xpcom/tests/gtest', +] + include('/ipc/chromium/chromium-config.mozbuild') FINAL_LIBRARY = 'xul-gtest' From eb54ec6bb0353f0082cd55b1f37fb4911305616d Mon Sep 17 00:00:00 2001 From: Andrea Marchesini Date: Thu, 2 Nov 2017 19:14:41 +0100 Subject: [PATCH 31/33] Bug 1413901 - Move rust-url-capi.h include in the MozURL.cpp, r=valentin --- netwerk/base/MozURL.cpp | 14 ++++++++++++++ netwerk/base/MozURL.h | 14 ++++++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/netwerk/base/MozURL.cpp b/netwerk/base/MozURL.cpp index 9293fbc49c37..a73742d3c03e 100644 --- a/netwerk/base/MozURL.cpp +++ b/netwerk/base/MozURL.cpp @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "MozURL.h" +#include "rust-url-capi/src/rust-url-capi.h" namespace mozilla { namespace net { @@ -107,6 +108,13 @@ MozURL::GetOrigin(nsACString& aOrigin) // MozURL::Mutator +MozURL::Mutator::Mutator(MozURL* url) + : mURL(rusturl_clone(url->mURL.get())) + , mFinalized(false) + , mStatus(NS_OK) +{ +} + // This macro ensures that the mutator is still valid, meaning it hasn't been // finalized, and none of the setters have returned an error code. #define ENSURE_VALID() \ @@ -206,5 +214,11 @@ MozURL::Mutator::SetPort(int32_t aPort) return *this; } +void +MozURL::FreeRustURL::operator()(rusturl* aPtr) +{ + rusturl_free(aPtr); +} + } // namespace net } // namespace mozilla diff --git a/netwerk/base/MozURL.h b/netwerk/base/MozURL.h index afdc1f98db8b..7c924a6ad3f0 100644 --- a/netwerk/base/MozURL.h +++ b/netwerk/base/MozURL.h @@ -5,9 +5,12 @@ #ifndef mozURL_h__ #define mozURL_h__ -#include "rust-url-capi/src/rust-url-capi.h" #include "mozilla/UniquePtr.h" +extern "C" { +struct rusturl; +} + namespace mozilla { namespace net { @@ -62,7 +65,7 @@ private: virtual ~MozURL() {} struct FreeRustURL { - void operator()(rusturl* aPtr) { rusturl_free(aPtr); } + void operator()(rusturl* aPtr); }; mozilla::UniquePtr mURL; @@ -111,12 +114,7 @@ public: // if (NS_SUCCEEDED(rv)) { /* use url2 */ } nsresult GetStatus() { return mStatus; } private: - explicit Mutator(MozURL* url) - : mURL(rusturl_clone(url->mURL.get())) - , mFinalized(false) - , mStatus(NS_OK) - { - } + explicit Mutator(MozURL* url); mozilla::UniquePtr mURL; bool mFinalized; nsresult mStatus; From 06f236c2b4af465f15281e07e3de3466d665e1e9 Mon Sep 17 00:00:00 2001 From: ffxbld Date: Thu, 2 Nov 2017 11:31:57 -0700 Subject: [PATCH 32/33] No bug, Automated HSTS preload list update from host bld-linux64-spot-031 - a=hsts-update --- security/manager/ssl/nsSTSPreloadList.errors | 187 +- security/manager/ssl/nsSTSPreloadList.inc | 1625 +++++++++++++++++- 2 files changed, 1683 insertions(+), 129 deletions(-) diff --git a/security/manager/ssl/nsSTSPreloadList.errors b/security/manager/ssl/nsSTSPreloadList.errors index 4bd60af155cf..f30b61ef98ea 100644 --- a/security/manager/ssl/nsSTSPreloadList.errors +++ b/security/manager/ssl/nsSTSPreloadList.errors @@ -15,13 +15,16 @@ aaronmcguire.me: could not connect to host abolition.co: could not connect to host abrilect.com: could not connect to host accwing.com: could not connect to host +ackis.duckdns.org: could not connect to host acrossgw.com: could not connect to host +adamfontenot.com: could not connect to host adamgold.net: could not connect to host adzie.xyz: could not connect to host aevpn.org: could not connect to host agowa338.de: could not connect to host akiba-server.info: could not connect to host akoww.de: could not connect to host +akstudentsfirst.org: could not connect to host akul.co.in: could not connect to host al-f.net: could not connect to host alamgir.works: could not connect to host @@ -35,11 +38,13 @@ aljammaz.holdings: could not connect to host alphie.me: could not connect to host altahrim.net: could not connect to host ameho.me: could not connect to host +americansportsinstitute.org: could not connect to host amua.fr: could not connect to host andiplusben.com: could not connect to host andrei-coman.com: could not connect to host andrepicard.de: could not connect to host annetaan.fi: could not connect to host +answers-online.ru: could not connect to host anyways.at: could not connect to host aoku3d.com: could not connect to host apcube.com: could not connect to host @@ -52,7 +57,6 @@ artisense.de: could not connect to host artyland.ru: could not connect to host askmagicconch.com: could not connect to host assdecoeur.org: could not connect to host -astutikhonda.com: could not connect to host at1.co: could not connect to host athi.pl: could not connect to host austinsutphin.com: could not connect to host @@ -62,6 +66,7 @@ avi9526.pp.ua: could not connect to host awan.tech: could not connect to host awf0.xyz: could not connect to host baitulongbaycruises.com: could not connect to host +bakaweb.fr: could not connect to host balonmano.co: could not connect to host bandarifamily.com: could not connect to host bbdos.ru: could not connect to host @@ -73,7 +78,6 @@ benzou-space.com: could not connect to host berduri.com: could not connect to host berthelier.me: could not connect to host bey.io: could not connect to host -billaud.eu.org: could not connect to host binimo.com: could not connect to host bip.gov.sa: could not connect to host blackl.net: could not connect to host @@ -89,6 +93,7 @@ brage.info: could not connect to host bress.cloud: could not connect to host brettabel.com: could not connect to host brfvh24.se: could not connect to host +broersma.com: could not connect to host buenotour.ru: could not connect to host bullbits.com: could not connect to host burlesquemakeup.com: could not connect to host @@ -99,10 +104,11 @@ bvexplained.co.uk: could not connect to host by1898.com: could not connect to host bypass.kr: could not connect to host c16t.uk: could not connect to host +cafesg.net: could not connect to host calculatoaresecondhand.xyz: could not connect to host callabs.net: could not connect to host -candylion.rocks: could not connect to host carlandfaith.com: could not connect to host +cdeck.net: could not connect to host centos.pub: could not connect to host challengeskins.com: could not connect to host chaoticlaw.com: could not connect to host @@ -118,11 +124,12 @@ clearchatsandbox.com: could not connect to host clearviewwealthprojector.com.au: could not connect to host cloudbleed.info: could not connect to host cloudimproved.com: could not connect to host +cloudopt.net: could not connect to host cnlic.com: could not connect to host coco-cool.fr: could not connect to host +code.fm: could not connect to host codercross.com: could not connect to host coffeetocode.me: could not connect to host -coldawn.com: could not connect to host colleencornez.com: could not connect to host colo-tech.com: could not connect to host comprehensiveihc.com: could not connect to host @@ -158,23 +165,24 @@ dev-talk.eu: could not connect to host devkid.net: could not connect to host devops.moe: could not connect to host dick.red: could not connect to host -digioccumss.ddns.net: could not connect to host diguass.us: could not connect to host dijks.com: could not connect to host dirtycat.ru: could not connect to host disadattamentolavorativo.it: could not connect to host disco-crazy-world.de: could not connect to host djangogolf.com: could not connect to host +dlyl888.com: could not connect to host dojifish.space: could not connect to host domengrad.ru: could not connect to host -donotspellitgav.in: could not connect to host dreaming.solutions: could not connect to host dreizwosechs.de: could not connect to host +dronexpertos.com: could not connect to host droomhuis-in-zuid-holland-kopen.nl: could not connect to host duch.cloud: could not connect to host duelsow.eu: could not connect to host duks.com.br: could not connect to host duo.money: could not connect to host +duole30.com: could not connect to host e-wishlist.net: could not connect to host e3q.de: could not connect to host eagleridgecampground.com: could not connect to host @@ -187,13 +195,11 @@ einaros.is: could not connect to host eled.io: could not connect to host elexel.ru: could not connect to host elsword.moe: could not connect to host -endohaus.us: could not connect to host energy-drink-magazin.de: could not connect to host engg.ca: could not connect to host enriquepiraces.com: could not connect to host ericdiao.com: could not connect to host eriser.fr: could not connect to host -esseriumani.com: could not connect to host estan.cn: could not connect to host eurostrategy.vn.ua: could not connect to host eveshaiwu.com: could not connect to host @@ -207,8 +213,8 @@ findmybottleshop.com.au: could not connect to host firebaseio.com: could not connect to host firexarxa.de: could not connect to host first-time-offender.com: could not connect to host +fixate.ru: could not connect to host fixmyglitch.com: could not connect to host -flyss.net: could not connect to host foodserve.in: could not connect to host forglemmigej.net: could not connect to host foshanshequ.com: could not connect to host @@ -219,6 +225,7 @@ fr0zenbits.io: could not connect to host fragnic.com: could not connect to host franklinhua.com: could not connect to host fransallen.com: could not connect to host +franzt.ovh: could not connect to host freaksites.dk: could not connect to host fredliang.cn: could not connect to host fredtec.ru: could not connect to host @@ -232,16 +239,13 @@ funfunmstdn.tokyo: could not connect to host funideas.org: could not connect to host funksteckdosen24.de: could not connect to host futbolvivo.tv: could not connect to host -fyol.pw: could not connect to host g4w.co: could not connect to host gaiserik.com: could not connect to host gala.kiev.ua: could not connect to host gam3rs.de: could not connect to host game-gentle.com: could not connect to host -garagemhermetica.org: could not connect to host gasbarkenora.com: could not connect to host gasnews.net: could not connect to host -gasser-daniel.ch: could not connect to host gayforgenji.com: could not connect to host gaygeeks.de: could not connect to host gbcsummercamps.com: could not connect to host @@ -255,10 +259,9 @@ getwarden.net: could not connect to host gevaulug.fr: could not connect to host gfoss.gr: could not connect to host ggss.cf: could not connect to host +ghaglund.se: could not connect to host glasner.photo: could not connect to host -glazedmag.fr: could not connect to host gnom.me: could not connect to host -godrealms.com: could not connect to host godrive.ga: could not connect to host google: could not connect to host gottfridsberg.org: could not connect to host @@ -290,11 +293,11 @@ heptner24.de: could not connect to host here.ml: could not connect to host hg881.com: could not connect to host hiraku.me: could not connect to host +homophoni.com: could not connect to host hoodoo.io: could not connect to host hoodoo.tech: could not connect to host horvathd.eu: could not connect to host hukkatavara.com: could not connect to host -humanexperiments.com: could not connect to host hundter.com: could not connect to host hwcine.com: could not connect to host ibase.com: could not connect to host @@ -316,6 +319,7 @@ iris-insa.com: could not connect to host issuesofconcern.in: could not connect to host itpro-mg.de: could not connect to host itproject.guru: could not connect to host +ivanilla.org: could not connect to host ivanpolchenko.com: could not connect to host ixio.cz: could not connect to host jaaxypro.com: could not connect to host @@ -326,13 +330,12 @@ jayharris.ca: could not connect to host jbelien.be: could not connect to host jessevictors.com: could not connect to host jhburton.co.uk: could not connect to host -jialinwu.com: could not connect to host -jiangzm.com: could not connect to host jie.dance: could not connect to host jiyuu-ni.com: could not connect to host jiyuu-ni.net: could not connect to host jobmedic.com: could not connect to host joecod.es: could not connect to host +johand.io: could not connect to host jonathansanchez.pro: could not connect to host jonpads.com: could not connect to host joostbovee.nl: could not connect to host @@ -340,7 +343,7 @@ juliawebber.co.za: could not connect to host just-pools.co.za: could not connect to host justmy.website: could not connect to host juventusmania1897.com: could not connect to host -k82.org: could not connect to host +kabus.org: could not connect to host kaika-facilitymanagement.de: could not connect to host kamikaichimaru.com: could not connect to host kanaanonline.org: could not connect to host @@ -353,6 +356,7 @@ kawaiiku.de: could not connect to host kenrogers.co: could not connect to host kenvix.com: could not connect to host keyihao.cn: could not connect to host +kibriscicek.net: could not connect to host kieranweightman.me: could not connect to host kikuzuki.org: could not connect to host kinepolis-studio.ga: could not connect to host @@ -368,9 +372,8 @@ kopular.com: could not connect to host kousaku.jp: could not connect to host kozmik.co: could not connect to host kteen.info: could not connect to host +kucheryavenkovn.ru: could not connect to host kylling.io: could not connect to host -kzsdabas.hu: could not connect to host -l0re.com: could not connect to host l18.io: could not connect to host laboutiquemarocaineduconvoyeur.ma: could not connect to host lacasa.fr: could not connect to host @@ -383,6 +386,7 @@ lazulu.com: could not connect to host lcti.biz: could not connect to host ldcraft.pw: could not connect to host legitaxi.com: could not connect to host +leifdreizler.com: could not connect to host leiming.co: could not connect to host leninalbertop.com.ve: could not connect to host lenkunz.me: could not connect to host @@ -405,7 +409,6 @@ livnev.me: could not connect to host lobosdomain.no-ip.info: could not connect to host logcat.info: could not connect to host logic8.ml: could not connect to host -loli.pet: could not connect to host loss.no: could not connect to host lovelytimes.net: could not connect to host luav.org: could not connect to host @@ -413,7 +416,9 @@ lubomirkazakov.com: could not connect to host lucasgaland.com: could not connect to host luenwarneke.com: could not connect to host luisyr.com: could not connect to host +maartenterpstra.xyz: could not connect to host macedopesca.com.br: could not connect to host +mader.jp: could not connect to host madrants.net: could not connect to host magnacumlaude.co: could not connect to host mail4geek.com: could not connect to host @@ -432,11 +437,11 @@ melonstudios.net: could not connect to host mentax.net: could not connect to host metachris.com: could not connect to host metrobriefs.com: could not connect to host +mhjuma.com: could not connect to host mikek.work: could not connect to host mingy.ddns.net: could not connect to host minitruckin.net: could not connect to host miyugirls.com: could not connect to host -mkfs.fr: could not connect to host mmstick.tk: could not connect to host modded-minecraft-server-list.com: could not connect to host moe-max.jp: could not connect to host @@ -454,26 +459,29 @@ mtn.cc: could not connect to host munduch.cz: could not connect to host muslimbanter.co.za: could not connect to host mvnet.com.br: could not connect to host +myfrenchtattoo.fr: could not connect to host naphex.rocks: could not connect to host narodsovety.ru: could not connect to host nauck.org: could not connect to host ncdesigns-studio.com: could not connect to host -ndtblog.com: could not connect to host nedcf.org.uk: could not connect to host neer.io: could not connect to host -negai.moe: could not connect to host netica.fr: could not connect to host netulo.com: could not connect to host nevadafiber.net: could not connect to host nexuscorporation.in: could not connect to host nfluence.org: could not connect to host +nhliberty.org: could not connect to host +nico.st: could not connect to host nienfun.com: could not connect to host nikolasbradshaw.com: could not connect to host niouininon.eu: could not connect to host niva.synology.me: could not connect to host nkb.in.th: could not connect to host nlegall.fr: could not connect to host +nodelab-it.de: could not connect to host notesforpebble.com: could not connect to host +novascan.net: could not connect to host novelabs.eu: could not connect to host nowremindme.com: could not connect to host nstd.net: could not connect to host @@ -487,14 +495,11 @@ onewebdev.info: could not connect to host onstud.com: could not connect to host onwie.fr: could not connect to host opengg.me: could not connect to host -optimist.bg: could not connect to host orangenbaum.at: could not connect to host -oreka.online: could not connect to host oscsdp.cz: could not connect to host ostan-collections.net: could not connect to host outetc.com: could not connect to host ovnrain.com: could not connect to host -oxro.co: could not connect to host oxygaming.com: could not connect to host oxymc.com: could not connect to host palava.tv: could not connect to host @@ -509,14 +514,15 @@ perkbrian.com: could not connect to host persjrp.ca: could not connect to host persoform.ch: could not connect to host pgpmail.cc: could not connect to host +phi-works.com: could not connect to host philippa.cool: could not connect to host picallo.es: could not connect to host -pincodeit.com: could not connect to host pinebaylibrary.org: could not connect to host pitfire.io: could not connect to host pixipics.com: could not connect to host plaasprodukte.com: could not connect to host planbox.info: could not connect to host +playform.cloud: could not connect to host plussizereviews.com: could not connect to host pointagri.com: could not connect to host polit.im: could not connect to host @@ -534,12 +540,12 @@ qoqo.us: could not connect to host qrforex.com: could not connect to host qto.net: could not connect to host rainbin.com: could not connect to host +rbqcloud.com: could not connect to host real-compare.com: could not connect to host realwoo.com: could not connect to host reignsphere.net: could not connect to host reinaertvandecruys.me: could not connect to host reismil.ch: could not connect to host -report-to.com: could not connect to host report-to.io: could not connect to host report-url.com: could not connect to host report-url.io: could not connect to host @@ -554,7 +560,6 @@ retube.ga: could not connect to host reykjavik.guide: could not connect to host ricknox.com: could not connect to host riverweb.gr: could not connect to host -robinvdmarkt.nl: could not connect to host robomonkey.org: could not connect to host roeldevries.me: could not connect to host roguesignal.net: could not connect to host @@ -566,6 +571,7 @@ rsldb.com: could not connect to host rubyist.today: could not connect to host runcarina.com: could not connect to host ruobiyi.com: could not connect to host +safe.moe: could not connect to host saferedirectlink.com: could not connect to host sallysubs.com: could not connect to host salzamt.tk: could not connect to host @@ -574,11 +580,9 @@ sanatrans.com: could not connect to host sarndipity.com: could not connect to host sber.us: could not connect to host scheidtweiler.de: could not connect to host -schnapke.name: could not connect to host scm-2017.org: could not connect to host sebastian-lutsch.de: could not connect to host sectest.ml: could not connect to host -security.love: could not connect to host securitymap.wiki: could not connect to host securitysoapbox.com: could not connect to host sehnenweh.org: could not connect to host @@ -599,7 +603,6 @@ shoppingreview.org: could not connect to host siliconchip.me: could not connect to host simbolo.co.uk: could not connect to host simplerses.com: could not connect to host -singerwang.com: could not connect to host siqi.wang: could not connect to host skarox.com: could not connect to host skarox.net: could not connect to host @@ -624,7 +627,6 @@ spha.info: could not connect to host spicywombat.com: could not connect to host spom.net: could not connect to host sportsmanadvisor.com: could not connect to host -ssl.do: could not connect to host stadtgartenla.com: could not connect to host statgram.me: could not connect to host static-assets.io: could not connect to host @@ -636,7 +638,6 @@ stickswag.cf: could not connect to host stilettomoda.com.br: could not connect to host stpip.com: could not connect to host stylle.me: could not connect to host -sudaraka.org: could not connect to host sunjaydhama.com: could not connect to host sussexwebdesigns.com: could not connect to host sviz.pro: could not connect to host @@ -645,16 +646,15 @@ talktwincities.com: could not connect to host tatsidou.gr: could not connect to host tdsb.cf: could not connect to host tdsbhack.tk: could not connect to host -teamx-gaming.de: could not connect to host techask.it: could not connect to host techpit.us: could not connect to host telugu4u.net: could not connect to host tenispopular.com: could not connect to host +tf2b.com: could not connect to host th3nd.com: could not connect to host -thekrewserver.com: could not connect to host +the-gist.io: could not connect to host theprivacysolution.com: could not connect to host thesehighsandlows.com: could not connect to host -thesteins.org: could not connect to host thinkcash.nl: could not connect to host thinktux.net: could not connect to host thynx.io: could not connect to host @@ -666,7 +666,6 @@ totallynotaserver.com: could not connect to host totch.de: could not connect to host totot.net: could not connect to host toxicip.com: could not connect to host -traces.ml: could not connect to host transcendmotor.sg: could not connect to host tucidi.net: could not connect to host turn-sticks.com: could not connect to host @@ -678,8 +677,6 @@ u.nu: could not connect to host umsapi.com: could not connect to host unicorn.li: could not connect to host unsupervised.ca: could not connect to host -upr.com.ua: could not connect to host -urban-culture.fr: could not connect to host vadik.me: could not connect to host valshamar.is: could not connect to host vanderstraeten.dynv6.net: could not connect to host @@ -692,9 +689,7 @@ vinetalk.net: could not connect to host vipi.es: could not connect to host visiontree.eu: could not connect to host vlogge.com: could not connect to host -vmgirls.com: could not connect to host vmug.pl: could not connect to host -vogler.name: could not connect to host vrtouring.org: could not connect to host w4.no: could not connect to host wanashi.com: could not connect to host @@ -715,8 +710,8 @@ werkinc.de: could not connect to host werkkrew.xyz: could not connect to host wetthost.com: could not connect to host whilsttraveling.com: could not connect to host -wilhelm-nathan.de: could not connect to host winnersports.co: could not connect to host +wissl.org: could not connect to host wolfemg.com: could not connect to host wolfenland.net: could not connect to host woomu.me: could not connect to host @@ -744,7 +739,6 @@ yux.fr: could not connect to host zaoext.com: could not connect to host zenghx.tk: could not connect to host zerosource.net: could not connect to host -zeug.co: could not connect to host zhiin.net: could not connect to host ztytian.com: could not connect to host zulu7.com: could not connect to host @@ -798,7 +792,6 @@ zzw.ca: could not connect to host 16packets.com: could not connect to host 173vpn.cn: could not connect to host 173vpns.com: did not receive HSTS header -1844329061.rsc.cdn77.org: did not receive HSTS header 188betwarriors.co.uk: could not connect to host 188trafalgar.ca: did not receive HSTS header 195gm.com: could not connect to host @@ -830,7 +823,7 @@ zzw.ca: could not connect to host 2intermediate.co.uk: did not receive HSTS header 2or3.tk: could not connect to host 2smart4food.com: did not receive HSTS header -2ss.jp: could not connect to host +2ss.jp: did not receive HSTS header 300651.ru: did not receive HSTS header 300m.com: did not receive HSTS header 300mbmovie24.com: did not receive HSTS header @@ -933,7 +926,7 @@ zzw.ca: could not connect to host 90smthng.com: could not connect to host 9118b.com: could not connect to host 911911.pw: could not connect to host -915ers.com: could not connect to host +915ers.com: did not receive HSTS header 922.be: could not connect to host 960news.ca: could not connect to host 9651678.ru: could not connect to host @@ -961,7 +954,6 @@ aaronkimmig.de: could not connect to host aati.info: did not receive HSTS header abareplace.com: did not receive HSTS header abcdentalcare.com: did not receive HSTS header -abcheck.se: could not connect to host abearofsoap.com: could not connect to host abecodes.net: did not receive HSTS header abeestrada.com: did not receive HSTS header @@ -1033,7 +1025,6 @@ adesa-asesoria.com: did not receive HSTS header adfa-1.com: could not connect to host adhs-chaoten.net: did not receive HSTS header adindexr.com: could not connect to host -adiponectinsupplement.net: did not receive HSTS header admin.google.com: did not receive HSTS header (error ignored - included regardless) admiral.dp.ua: did not receive HSTS header admitcard.co.in: did not receive HSTS header @@ -1185,7 +1176,7 @@ alza.co.uk: did not receive HSTS header alza.cz: did not receive HSTS header alza.de: did not receive HSTS header alza.hu: did not receive HSTS header -alza.sk: could not connect to host +alza.sk: did not receive HSTS header alzashop.com: did not receive HSTS header am8888.top: could not connect to host amandaonishi.com: could not connect to host @@ -1290,6 +1281,7 @@ aojf.fr: could not connect to host aov.io: could not connect to host aozora.moe: could not connect to host apachelounge.com: did not receive HSTS header +apadrinaunolivo.org: did not receive HSTS header apaginastore.com.br: could not connect to host apeasternpower.com: could not connect to host api.mega.co.nz: could not connect to host @@ -1452,6 +1444,7 @@ av.de: did not receive HSTS header avadatravel.com: did not receive HSTS header avantmfg.com: did not receive HSTS header avec-ou-sans-ordonnance.fr: could not connect to host +aveling-adventure.co.uk: could not connect to host avepol.cz: did not receive HSTS header avepol.eu: did not receive HSTS header aviacao.pt: did not receive HSTS header @@ -1594,7 +1587,7 @@ benk.press: could not connect to host benny003.de: did not receive HSTS header benohead.com: did not receive HSTS header bentphotos.se: could not connect to host -benwattie.com: did not receive HSTS header +benwattie.com: could not connect to host benzkosmetik.de: did not receive HSTS header beourvictim.com: max-age too low: 2678400 bep362.vn: could not connect to host @@ -1686,7 +1679,6 @@ bitf.ly: could not connect to host bitfactory.ws: could not connect to host bitfarm-archiv.com: did not receive HSTS header bitfarm-archiv.de: did not receive HSTS header -bitfehler.net: max-age too low: 3600 bitheus.com: could not connect to host bithosting.io: did not receive HSTS header bitlish.com: max-age too low: 86400 @@ -1732,7 +1724,7 @@ bloomzoomy.ru: max-age too low: 172800 blowjs.com: could not connect to host bltc.co: could not connect to host blubbablasen.de: could not connect to host -blucas.org: did not receive HSTS header +blucas.org: could not connect to host blue17.co.uk: did not receive HSTS header bluebill.net: did not receive HSTS header bluecon.eu: did not receive HSTS header @@ -1788,7 +1780,6 @@ boyan.in: did not receive HSTS header bp-wahl.at: did not receive HSTS header bqtoolbox.com: could not connect to host bragasoft.com.br: did not receive HSTS header -braiampeguero.xyz: did not receive HSTS header braineet.com: did not receive HSTS header brainfork.ml: could not connect to host braintm.com: could not connect to host @@ -2114,7 +2105,6 @@ christiaandruif.nl: could not connect to host christianbro.gq: could not connect to host christina-quast.de: did not receive HSTS header christophercolumbusfoundation.gov: could not connect to host -christophersole.com: could not connect to host christophheich.me: could not connect to host chrisupjohn.com: could not connect to host chrisvicmall.com: did not receive HSTS header @@ -2332,6 +2322,7 @@ correctpaardbatterijnietje.nl: did not receive HSTS header corruption-mc.net: could not connect to host corruption-rsps.net: could not connect to host corruption-server.net: could not connect to host +cortisolsupplement.com: did not receive HSTS header costow.club: could not connect to host count.sh: could not connect to host couponcodeq.com: could not connect to host @@ -2546,7 +2537,9 @@ dcuofriends.net: could not connect to host dcurt.is: did not receive HSTS header dcw.io: could not connect to host ddatsh.com: did not receive HSTS header +dden.ca: did not receive HSTS header dden.website: did not receive HSTS header +dden.xyz: did not receive HSTS header debank.tv: did not receive HSTS header debatch.se: could not connect to host debian-vhost.de: did not receive HSTS header @@ -2572,6 +2565,7 @@ deight.co: could not connect to host deinserverhost.de: did not receive HSTS header dekasan.ru: could not connect to host delayrefunds.co.uk: could not connect to host +delbrouck.ch: did not receive HSTS header deliverance.co.uk: could not connect to host deltaconcepts.de: did not receive HSTS header delvj.org: could not connect to host @@ -2653,7 +2647,7 @@ digitalero.rip: did not receive HSTS header digitaljungle.net: could not connect to host digitalnonplus.com: could not connect to host digitalquery.com: did not receive HSTS header -digitalriver.tk: did not receive HSTS header +digitalriver.tk: could not connect to host digitalskillswap.com: could not connect to host dim.lighting: could not connect to host dinamoelektrik.com: could not connect to host @@ -2864,7 +2858,6 @@ ebooksgratuits.org: did not receive HSTS header ebp2p.com: did not receive HSTS header ebpglobal.com: did not receive HSTS header ebraph.com: could not connect to host -ec-hasslau.de: max-age too low: 0 ecake.in: could not connect to host ecc-kaufbeuren.de: could not connect to host ecdn.cz: could not connect to host @@ -2913,12 +2906,11 @@ eengezinswoning-in-zwartewaterland-kopen.nl: could not connect to host eengezinswoningverkopen.nl: could not connect to host eenhoorn.ga: could not connect to host eesistumine2017.ee: could not connect to host -effectiveosgi.com: could not connect to host efficienthealth.com: did not receive HSTS header effortlesshr.com: did not receive HSTS header egge.com: max-age too low: 0 egit.co: could not connect to host -eglek.com: did not receive HSTS header +eglek.com: could not connect to host ego-world.org: could not connect to host ehealthcounselor.com: could not connect to host ehipaadev.com: could not connect to host @@ -3030,7 +3022,6 @@ ephry.com: could not connect to host epicmc.games: could not connect to host epicpages.com: could not connect to host epoxate.com: could not connect to host -epulsar.ru: did not receive HSTS header eq8.net.au: could not connect to host eqim.me: could not connect to host equate.net.au: did not receive HSTS header @@ -3039,6 +3030,7 @@ equilibre-yoga-jennifer-will.com: could not connect to host equitee.co: did not receive HSTS header equityflows.com: did not receive HSTS header erawanarifnugroho.com: did not receive HSTS header +erclab.kr: could not connect to host eressea.xyz: could not connect to host ergorium.com: did not receive HSTS header ergorium.eu: did not receive HSTS header @@ -3132,7 +3124,7 @@ exfiles.cz: did not receive HSTS header exgravitus.com: could not connect to host exno.co: could not connect to host exousiakaidunamis.xyz: could not connect to host -expertmile.com: could not connect to host +expertmile.com: did not receive HSTS header expo-designers.com: did not receive HSTS header express-vpn.com: did not receive HSTS header expressfinance.co.za: did not receive HSTS header @@ -3255,7 +3247,6 @@ finanzkontor.net: could not connect to host findigo.fish: could not connect to host findingmyname.com: did not receive HSTS header findtutorsnearme.com: did not receive HSTS header -finfev.de: could not connect to host fingent.com: did not receive HSTS header finiteheap.com: did not receive HSTS header finpt.com: did not receive HSTS header @@ -3488,7 +3479,7 @@ gamerz-point.de: could not connect to host gamesdepartment.co.uk: did not receive HSTS header gameserver-sponsor.de: did not receive HSTS header gamesurferapp.com: could not connect to host -gamingmedia.eu: did not receive HSTS header +gamingmedia.eu: could not connect to host gampenhof.de: did not receive HSTS header gaptek.id: did not receive HSTS header gar-nich.net: could not connect to host @@ -3496,12 +3487,14 @@ garageon.net: did not receive HSTS header garciamartin.me: could not connect to host garcinia--cambogia.com: could not connect to host garden.trade: could not connect to host -gardencarezone.com: could not connect to host +gardencarezone.com: did not receive HSTS header garfieldairlines.net: did not receive HSTS header gatapro.net: could not connect to host gatorsa.es: did not receive HSTS header gaussorgues.me: could not connect to host gdegem.org: did not receive HSTS header +gdz-spishy.com: did not receive HSTS header +gdz.tv: did not receive HSTS header gebn.co.uk: did not receive HSTS header gebn.uk: could not connect to host gedankenbude.info: could not connect to host @@ -3590,7 +3583,7 @@ gipsic.com: did not receive HSTS header gis3m.org: did not receive HSTS header gistfy.com: could not connect to host git-stuff.tk: could not connect to host -github.party: did not receive HSTS header +github.party: could not connect to host givemyanswer.com: could not connect to host gizzo.sk: could not connect to host glass.google.com: did not receive HSTS header (error ignored - included regardless) @@ -3625,6 +3618,7 @@ goat.chat: did not receive HSTS header goat.xyz: max-age too low: 86400 goben.ch: could not connect to host goblins.net: did not receive HSTS header +godrealms.com: did not receive HSTS header goedeke.ml: could not connect to host goerner.me: did not receive HSTS header goge.site: could not connect to host @@ -3857,7 +3851,6 @@ harvestrenewal.org: did not receive HSTS header harz.cloud: could not connect to host has.vision: could not connect to host hash-list.com: could not connect to host -hash.my: max-age too low: 0 hasilocke.de: did not receive HSTS header hasinase.de: did not receive HSTS header haste.ch: could not connect to host @@ -3941,7 +3934,7 @@ highvelocitydesign.com: could not connect to host hiisukun.com: could not connect to host hiitcentre.com: did not receive HSTS header hikariempire.com: could not connect to host -hikinggearlab.com: could not connect to host +hikinggearlab.com: did not receive HSTS header hilinemerchandising.com: did not receive HSTS header hillcity.org.nz: did not receive HSTS header hilnu.tk: could not connect to host @@ -3956,7 +3949,6 @@ hititgunesi-tr.com: did not receive HSTS header hitoy.org: did not receive HSTS header hittipps.com: did not receive HSTS header hiv.gov: did not receive HSTS header -hjes.com.ve: could not connect to host hjw-kunstwerk.de: could not connect to host hlyue.com: did not receive HSTS header hm1ch.ovh: could not connect to host @@ -3994,7 +3986,6 @@ horseboners.xxx: did not receive HSTS header hortifarm.ro: did not receive HSTS header horvathtom.com: could not connect to host hosteasy.nl: did not receive HSTS header -hosted4u.de: did not receive HSTS header hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless) hostelite.com: did not receive HSTS header hostgarou.com: did not receive HSTS header @@ -4035,6 +4026,7 @@ httphacker.com: could not connect to host https.ps: could not connect to host httpstatuscode418.xyz: could not connect to host huangh.com: could not connect to host +huangjingjing.com: did not receive HSTS header huarongdao.com: did not receive HSTS header hubert.systems: did not receive HSTS header hugocollignon.fr: could not connect to host @@ -4115,6 +4107,7 @@ ifx.ee: could not connect to host igforums.com: could not connect to host igiftcards.nl: did not receive HSTS header ignatisd.gr: did not receive HSTS header +iguana.com.ec: did not receive HSTS header igule.net: could not connect to host ihrlotto.de: could not connect to host ihrnationalrat.ch: could not connect to host @@ -4682,7 +4675,7 @@ kletterkater.com: did not receive HSTS header klicktojob.de: could not connect to host klunkergarten.org: could not connect to host knapen.io: max-age too low: 604800 -knccloud.com: could not connect to host +knccloud.com: did not receive HSTS header kngk-transavto.ru: could not connect to host knigadel.com: did not receive HSTS header knightsbridgegroup.org: could not connect to host @@ -4823,7 +4816,6 @@ laplaceduvillage.net: could not connect to host laplanetebleue.com: did not receive HSTS header laquack.com: could not connect to host laredsemanario.com: could not connect to host -larraz.es: did not receive HSTS header lasercloud.ml: could not connect to host laserfuchs.de: did not receive HSTS header lashstuff.com: did not receive HSTS header @@ -4844,6 +4836,7 @@ lawly.org: could not connect to host laxatus.com: could not connect to host laxiongames.es: could not connect to host layer8.tk: could not connect to host +lbphacker.pw: did not receive HSTS header lbrt.xyz: could not connect to host ldarby.me.uk: could not connect to host leadbook.ru: max-age too low: 604800 @@ -4968,7 +4961,7 @@ lisgade.dk: did not receive HSTS header listafirmelor.com: could not connect to host listage.ovh: did not receive HSTS header litespeed.io: could not connect to host -little.pw: did not receive HSTS header +little.pw: could not connect to host littlefreelibrary.org: did not receive HSTS header littleqiu.net: could not connect to host liujunyang.com: could not connect to host @@ -5144,6 +5137,7 @@ maleexcel.com: did not receive HSTS header malena.com.ua: did not receive HSTS header malerversand.de: did not receive HSTS header malfait.nl: could not connect to host +maljaars-fotografie.nl: did not receive HSTS header maljaars-media.nl: could not connect to host malmstroms-co.se: could not connect to host maltes.website: could not connect to host @@ -5288,6 +5282,7 @@ mdfnet.se: did not receive HSTS header mdscomp.net: did not receive HSTS header meadowfen.farm: could not connect to host meadowfenfarm.com: could not connect to host +mealz.com: did not receive HSTS header meamod.com: max-age too low: 0 meat-education.com: could not connect to host mebio.us: did not receive HSTS header @@ -5737,6 +5732,7 @@ nebulousenhanced.com: could not connect to host nedwave.com: could not connect to host nedzad.me: could not connect to host neftaly.com: did not receive HSTS header +negai.moe: did not receive HSTS header negativzinsen.info: did not receive HSTS header neilgreen.net: did not receive HSTS header neko-life.com: did not receive HSTS header @@ -5817,6 +5813,7 @@ nightwinds.tk: could not connect to host niho.jp: did not receive HSTS header nikcub.com: could not connect to host niklaslindblad.se: did not receive HSTS header +nikobradshaw.com: did not receive HSTS header niloxy.com: did not receive HSTS header ninchisho-online.com: did not receive HSTS header ninhs.org: could not connect to host @@ -5852,6 +5849,7 @@ nolimitsbook.de: did not receive HSTS header nolte.work: could not connect to host nomorebytes.de: could not connect to host noodlesandwich.com: did not receive HSTS header +nootropicsource.com: did not receive HSTS header nope.website: could not connect to host nopex.no: could not connect to host nopol.de: could not connect to host @@ -6118,6 +6116,7 @@ ovvy.net: did not receive HSTS header owennelson.me: could not connect to host owncloud.help: could not connect to host ownmovies.fr: could not connect to host +oxro.co: did not receive HSTS header oxygenabsorbers.com: did not receive HSTS header oxynux.fr: could not connect to host oyste.in: could not connect to host @@ -6351,6 +6350,7 @@ pixelhero.co.uk: did not receive HSTS header pixi.chat: could not connect to host pixi.me: did not receive HSTS header pizzadoc.ch: could not connect to host +pizzahut.ru: did not receive HSTS header pjbet.mg: did not receive HSTS header pkautodesign.com: did not receive HSTS header pkschat.com: could not connect to host @@ -6396,6 +6396,7 @@ pocloud.homelinux.net: could not connect to host podiumsdiskussion.org: did not receive HSTS header poiema.com.sg: did not receive HSTS header poinsot.beer: could not connect to host +poinsot.info: did not receive HSTS header pointeringles.com: could not connect to host pointiswunderland.de: did not receive HSTS header pointpro.de: did not receive HSTS header @@ -6442,7 +6443,7 @@ pourmesloisirs.com: did not receive HSTS header poussinooz.fr: could not connect to host povitria.net: could not connect to host power-l.ch: did not receive HSTS header -power-of-interest.com: could not connect to host +power-of-interest.com: did not receive HSTS header power99press.com: did not receive HSTS header poweroff.win: could not connect to host powerplannerapp.com: did not receive HSTS header @@ -6518,6 +6519,7 @@ prontocleaners.co.uk: could not connect to host prontolight.com: did not receive HSTS header prontomovers.co.uk: could not connect to host propactrading.com: could not connect to host +proposalonline.com: did not receive HSTS header prosocialmachines.com: could not connect to host prosoft.sk: did not receive HSTS header prosperident.com: did not receive HSTS header @@ -6760,6 +6762,7 @@ renteater.com: could not connect to host rentex.com: did not receive HSTS header renyiyou.com: could not connect to host replacemychina.com: could not connect to host +report-to.com: did not receive HSTS header reprolife.co.uk: could not connect to host res-rheingau.de: did not receive HSTS header res42.com: could not connect to host @@ -6789,8 +6792,6 @@ rhering.de: could not connect to host rhodosdreef.nl: could not connect to host riaucybersolution.net: did not receive HSTS header ribopierre.fr: could not connect to host -richardjgreen.net: did not receive HSTS header -richeza.com: did not receive HSTS header richiemail.net: did not receive HSTS header richmondsunlight.com: did not receive HSTS header richmtdriver.com: could not connect to host @@ -6990,6 +6991,7 @@ sawamura-rental.com: did not receive HSTS header say-hanabi.com: could not connect to host sayhanabi.com: could not connect to host sazima.ru: did not receive HSTS header +sbobetfun.com: did not receive HSTS header sbox-archives.com: could not connect to host sby.de: did not receive HSTS header sc4le.com: could not connect to host @@ -7023,7 +7025,6 @@ scores4schools.com: could not connect to host scotbirchfield.com: did not receive HSTS header scottdial.com: did not receive HSTS header scottferguson.com.au: did not receive HSTS header -scottgthomas.com: did not receive HSTS header scottnicol.co.uk: could not connect to host scourt.info: could not connect to host scourt.org.ua: could not connect to host @@ -7054,7 +7055,6 @@ sebastianhampl.de: could not connect to host sebastiensenechal.com: did not receive HSTS header sebster.com: did not receive HSTS header secandtech.com: could not connect to host -secboom.com: could not connect to host seccom.ch: did not receive HSTS header secnet.ga: could not connect to host secondary-survivor.com: could not connect to host @@ -7173,7 +7173,6 @@ shadowsocksvpn.com: did not receive HSTS header shadowsoks.com: could not connect to host shagi29.ru: did not receive HSTS header shakebox.de: could not connect to host -shakespearevet.com: did not receive HSTS header shanekoster.net: could not connect to host shanesage.com: could not connect to host shaobin.wang: could not connect to host @@ -7229,7 +7228,6 @@ sianimacion.com: could not connect to host sichere-kartenakzeptanz.de: could not connect to host siciliadigitale.pro: could not connect to host siddhant.me: max-age too low: 0 -sidpod.ru: did not receive HSTS header siebens.net: could not connect to host sifls.com: could not connect to host sifreuret.com: could not connect to host @@ -7403,8 +7401,6 @@ sotor.de: did not receive HSTS header soucorneteiro.com.br: could not connect to host soulfulglamour.uk: could not connect to host soundforsound.co.uk: did not receive HSTS header -soundtalks.be: max-age too low: 0 -soundtalks.com: max-age too low: 0 sourcelair.com: did not receive HSTS header southcoastswords.com: did not receive HSTS header southernjamusa.com: did not receive HSTS header @@ -7444,7 +7440,7 @@ spencerbaer.com: could not connect to host sperohub.io: could not connect to host spiegels.nl: could not connect to host spielcasinos.com: did not receive HSTS header -spikeykc.me: could not connect to host +spikeykc.me: did not receive HSTS header spillmaker.no: did not receive HSTS header spilsbury.io: could not connect to host spirit-dev.net: max-age too low: 0 @@ -7494,7 +7490,6 @@ stadjerspasonline.nl: could not connect to host stadtbauwerk.at: did not receive HSTS header staffjoy.com: did not receive HSTS header staffjoystaging.com: could not connect to host -stagingjobshq.com: did not receive HSTS header stahl.xyz: could not connect to host stalkerhispano.com: max-age too low: 0 stalschermer.nl: could not connect to host @@ -7521,6 +7516,7 @@ statuschecks.net: could not connect to host stayokhotelscdc-mailing.com: could not connect to host stcomex.com: did not receive HSTS header steelbea.ms: could not connect to host +steem.io: did not receive HSTS header stefanweiser.de: did not receive HSTS header stepbystep3d.com: did not receive HSTS header stephanierxo.com: did not receive HSTS header @@ -7590,12 +7586,10 @@ sturbock.me: did not receive HSTS header sturdio.com.br: could not connect to host stylenda.com: could not connect to host stytt.com: could not connect to host -sub.media: did not receive HSTS header subbing.work: could not connect to host subdimension.org: could not connect to host subeesu.com: could not connect to host subhacker.net: did not receive HSTS header -submedia.tv: did not receive HSTS header subsys.no: did not receive HSTS header subtitle.rip: could not connect to host subwayz.de: did not receive HSTS header @@ -7610,6 +7604,7 @@ sumoatm.com: did not receive HSTS header sumoscout.de: could not connect to host suncountrymarine.com: did not receive HSTS header sundanceusa.com: did not receive HSTS header +sunflyer.cn: did not receive HSTS header sunlandsg.vn: did not receive HSTS header sunnyfruit.ru: could not connect to host sunshinepress.org: could not connect to host @@ -7691,6 +7686,7 @@ t-complex.space: could not connect to host t-ken.xyz: could not connect to host t-tz.com: could not connect to host t0dd.eu: could not connect to host +t2i.nl: max-age too low: 3600 t4c-rebirth.com: could not connect to host t4x.org: could not connect to host taabe.xyz: could not connect to host @@ -7741,6 +7737,7 @@ tauchkater.de: could not connect to host tavoittaja.fi: did not receive HSTS header tavopica.lt: did not receive HSTS header taxbench.com: could not connect to host +taxi-24std.de: did not receive HSTS header taxsnaps.co.nz: did not receive HSTS header tazz.in: could not connect to host tbspace.de: did not receive HSTS header @@ -7847,6 +7844,7 @@ the-sky-of-valkyries.com: could not connect to host theamateurs.net: did not receive HSTS header theamp.com: did not receive HSTS header theater.cf: could not connect to host +theavenuegallery.com: did not receive HSTS header thebasementguys.com: could not connect to host thebeginningisnye.com: could not connect to host theberkshirescompany.com: could not connect to host @@ -7952,7 +7950,6 @@ thundercampaign.com: could not connect to host ti.blog.br: could not connect to host tianxing.pro: did not receive HSTS header tianxingvpn.pro: could not connect to host -tianya.tv: max-age too low: 0 tibbitshall.ca: did not receive HSTS header tickopa.co.uk: could not connect to host tickreport.com: did not receive HSTS header @@ -8094,6 +8091,7 @@ tpbcdn.com: could not connect to host tpe-edu.com: could not connect to host tpms4u.at: did not receive HSTS header tracker-gps.ch: could not connect to host +trackmeet.io: did not receive HSTS header tracktivity.com.au: did not receive HSTS header trade-smart.ru: could not connect to host tradingcentre.com.au: did not receive HSTS header @@ -8160,6 +8158,8 @@ tts.co.nz: did not receive HSTS header tuamoronline.com: could not connect to host tubbutec.de: did not receive HSTS header tubepro.de: did not receive HSTS header +tubetoon.com: did not receive HSTS header +tubetooncartoons.com: did not receive HSTS header tubex.ga: could not connect to host tucker.wales: could not connect to host tunai.id: could not connect to host @@ -8322,6 +8322,7 @@ urandom.eu.org: did not receive HSTS header urban-garden.lt: could not connect to host urban-garden.lv: could not connect to host urbanfi.sh: did not receive HSTS header +urbanstylestaging.com: did not receive HSTS header urbpic.com: could not connect to host urlchomp.com: did not receive HSTS header urphp.com: could not connect to host @@ -8440,7 +8441,7 @@ victoriapemberton.com: did not receive HSTS header vidbuchanan.co.uk: did not receive HSTS header viddiaz.com: did not receive HSTS header videomail.io: did not receive HSTS header -videomuz.com: did not receive HSTS header +videomuz.com: could not connect to host videotogel.net: did not receive HSTS header videoueberwachung-set.de: did not receive HSTS header vider.ga: could not connect to host @@ -8454,9 +8455,9 @@ vijos.org: did not receive HSTS header viktor-machnik.de: could not connect to host viktorsvantesson.net: did not receive HSTS header villacarmela.com.br: did not receive HSTS header +villasenor.online: did not receive HSTS header villenvinkit.com: did not receive HSTS header viltsu.net: did not receive HSTS header -vimeo.com: did not receive HSTS header vinasec.se: could not connect to host vincentkooijman.at: did not receive HSTS header vincentkooijman.nl: did not receive HSTS header @@ -8496,11 +8497,13 @@ vlvvl.com: did not receive HSTS header vm0.eu: did not receive HSTS header vmrdev.com: could not connect to host voceinveste.com: did not receive HSTS header +vogler.name: did not receive HSTS header voicesuk.co.uk: did not receive HSTS header voidserv.net: could not connect to host volcrado.com: did not receive HSTS header voliere-info.nl: did not receive HSTS header volkden.com: could not connect to host +voltotc.com: did not receive HSTS header vonavy-cukor.sk: could not connect to host vonavycukor.sk: could not connect to host vooreenveiligthuis.nl: did not receive HSTS header @@ -8558,7 +8561,7 @@ walnutgaming.co.uk: could not connect to host walterlynnmosley.com: did not receive HSTS header wan.pp.ua: could not connect to host wanban.io: could not connect to host -wangjun.me: did not receive HSTS header +wangjun.me: could not connect to host wangkezun.com: could not connect to host wangqiliang.cn: did not receive HSTS header wangqiliang.org: did not receive HSTS header @@ -8579,6 +8582,7 @@ waterforlife.net.au: did not receive HSTS header waterpoint.com.br: could not connect to host watersportmarkt.net: did not receive HSTS header watsonhall.uk: could not connect to host +wattechweb.com: did not receive HSTS header wave.is: could not connect to host wavefloatrooms.com: did not receive HSTS header wavefrontsystemstech.com: could not connect to host @@ -8860,7 +8864,6 @@ xinbiji.cn: did not receive HSTS header xisa.it: could not connect to host xivpn.com: could not connect to host xiyu.moe: could not connect to host -xmerak.com: could not connect to host xmonk.org: could not connect to host xmppwocky.net: could not connect to host xmr.my: could not connect to host @@ -8939,6 +8942,7 @@ yardbird.us: could not connect to host yarnhookup.com: did not receive HSTS header yasinaydin.net: did not receive HSTS header yasutomonodokoiko.com: did not receive HSTS header +ybresson.com: could not connect to host ycc.wtf: could not connect to host ycm2.wtf: could not connect to host ydy.jp: could not connect to host @@ -8972,6 +8976,7 @@ yoloboatrentals.com: did not receive HSTS header yoloprod.fr: could not connect to host yoloseo.com: could not connect to host yomepre.com: could not connect to host +yooooex.com: did not receive HSTS header yoru.me: did not receive HSTS header youcontrol.ru: could not connect to host youfencun.com: did not receive HSTS header diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index f8ded7082bcb..450a7cb72c11 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/ #include -const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); +const PRTime gPreloadListExpirationTime = INT64_C(1520533710030000); %% 0-1.party, 1 0.me.uk, 1 @@ -63,6 +63,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 0x52.org, 1 0x539.be, 1 0x65.net, 1 +0x7d.com, 1 0x7fffffff.net, 1 0x90.in, 1 0x90.io, 1 @@ -77,6 +78,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 0xfc.de, 1 0xn.de, 1 0yen.org, 1 +1-2-3bounce.co.uk, 1 100-downloads.com, 1 10000v.ru, 1 1000hats.com, 1 @@ -84,6 +86,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 1000serien.com, 1 1001.best, 1 1001kerstpakketten.com, 0 +100and1.jp, 1 100kredite.de, 1 100mani.it, 1 100onrainkajino.com, 1 @@ -93,6 +96,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 101sauna.ru, 1 1041263497.rsc.cdn77.org, 1 1066.io, 1 +10gb.io, 1 10gbit.ovh, 1 10hz.de, 1 10og.de, 1 @@ -138,6 +142,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 174.net.nz, 1 1750studios.com, 0 17hats.com, 1 +1844329061.rsc.cdn77.org, 1 188522.com, 0 18888msc.com, 1 1888zr.com, 1 @@ -148,6 +153,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 1921958389.rsc.cdn77.org, 1 1972969867.rsc.cdn77.org, 1 1981612088.rsc.cdn77.org, 1 +19hundert84.de, 1 1a-diamantscheiben.de, 1 1a-vermessung.at, 1 1a-werkstattgeraete.de, 1 @@ -164,6 +170,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 1km.ro, 1 1kmi.co, 1 1ll.uk, 1 +1morebounce.co.uk, 1 1nfr.com, 0 1nian.vip, 1 1of16.de, 1 @@ -178,7 +185,13 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 1rs.nl, 1 1scope.com, 1 1se2or3.com, 1 +1st-bounce.co.uk, 1 1st-community.de, 1 +1st4abounce.co.uk, 1 +1stchoicefun.co.uk, 1 +1stclassbouncycastles.co.uk, 1 +1stforfun.co.uk, 1 +1stpeninsulabouncers.co.uk, 1 1ststop.co.uk, 1 1whw.co.uk, 1 1wirelog.de, 1 @@ -188,6 +201,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 2048-spiel.de, 1 2048game.co.uk, 1 208.es, 1 +20denier.com, 1 21.co.uk, 1 21stnc.com, 1 21x9.org, 1 @@ -218,6 +232,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 2bcompany.ch, 1 2bis10.de, 1 2bitout.com, 1 +2bouncy.com, 1 2c-b.com, 1 2c-d.com, 1 2c-e.com, 1 @@ -229,6 +244,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 2fm.ie, 1 2fraud.pro, 1 2gen.com, 1 +2heartsbookings.co.uk, 1 2hypeenterprises.com, 1 2kgwf.fi, 1 2krueger.de, 1 @@ -239,6 +255,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 2programmers.net, 1 2stv.net, 1 2ulcceria.nl, 1 +30hzcollective.com, 1 3133780x.com, 1 314chan.org, 1 31klabs.com, 1 @@ -271,6 +288,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 3c-d.de, 1 3chat.org, 1 3circlefunding.ch, 1 +3countiescastlehire.co.uk, 1 3cs.ch, 1 3dm.audio, 1 3dmedium.de, 1 @@ -328,6 +346,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 4freepress.com, 1 4g-server.eu, 0 4garage.com.br, 1 +4host.ch, 1 4hvac.com, 1 4loc.us, 1 4mm.org, 1 @@ -347,6 +366,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 4xlabs.co, 1 500k.nl, 1 500p.xyz, 1 +50lakeshore.com, 1 50north.de, 1 50plusnet.nl, 1 525.info, 1 @@ -366,6 +386,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 5gb.space, 1 5h0r7.com, 1 5kraceforals.com, 1 +5starbouncycastlehire.co.uk, 1 605508.cc, 1 605508.com, 1 646.io, 0 @@ -438,6 +459,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 92bmh.com, 1 92url.com, 1 9449-27a1-22a1-e0d9-4237-dd99-e75e-ac85-2f47-9d34.de, 1 +9500years.com, 1 987987.com, 1 9906753.net, 1 9933445.com, 1 @@ -452,9 +474,13 @@ const PRTime gPreloadListExpirationTime = INT64_C(1520472914527000); 9yw.me, 1 a-1indianawaterproofing.com, 1 a-allard.be, 1 +a-classinflatables.co.uk, 1 a-intel.com, 1 a-ix.net, 1 a-little-linux-box.at, 1 +a-starbouncycastles.co.uk, 1 +a1bouncycastlehire.com, 1 +a1jumpandbounce.co.uk, 1 a1scuba.com, 1 a1scubastore.com, 1 a200k.xyz, 1 @@ -464,33 +490,47 @@ a2it.gr, 1 a2nutrition.com.au, 1 a7m2.me, 1 aa-tour.ru, 1 +aaapl.com, 1 aabanet.com.br, 1 aalalbayt.com, 1 aalalbayt.net, 1 aalstmotors-usedcars.be, 1 aamwa.com, 1 aandeautobody.com, 1 +aandkevents.co.uk, 1 aanmpc.com, 1 aaomidi.com, 1 aapas.org.ar, 1 aardvarksolutions.co.za, 1 aariefhaafiz.com, 1 +aarkue.eu, 1 aaronhorler.com, 1 aaronmcguire.me, 1 +aaronroyle.com, 1 aaronsilber.me, 1 aatf.us, 1 abaapplianceservice.com, 1 +abacus-events.co.uk, 1 +abacusbouncycastle.co.uk, 1 abacustech.co.jp, 1 abacustech.net, 1 abacustech.org, 1 abandonedmines.gov, 1 abasky.net, 1 +abbadabbabouncycastles.co.uk, 1 abbas.ch, 1 abborsjo.fi, 1 +abbotsparties.co.uk, 1 +abbottscastles.co.uk, 1 abbruch-star.de, 1 abc-rz.de, 1 abc.li, 1 +abcbouncycastlessurrey.co.uk, 1 +abcbouncyfactory.co.uk, 1 abcdef.be, 1 +abcdobebe.com, 1 +abcheck.se, 1 +abcpartyhire.com, 1 abdullah.pw, 1 abe-elektro.de, 1 abe.cloud, 0 @@ -498,11 +538,13 @@ abeilles-idapi.fr, 1 abenteuer-ahnenforschung.de, 1 abeontech.com, 1 aberdeenalmeras.com, 1 +aberdeencastles.co.uk, 1 aberdeenjudo.co.uk, 1 abeus.com, 1 abhisharma.me, 1 abi-fvs.de, 1 abiapp.net, 1 +abibruce.co.uk, 1 abidinginhesed.com, 1 abigisp.com, 1 abilitycaresoftware.com, 1 @@ -520,6 +562,7 @@ abn-consultants.ie, 1 abnehmen.com, 1 abnerchou.me, 1 abobuch.de, 1 +aboces.org, 1 aboderenovation.co.uk, 1 abolicionistas.com, 1 abolition.co, 1 @@ -545,6 +588,7 @@ abolitionniste.com, 1 abolizionista.com, 1 abosav.com, 1 abou.to, 0 +abouncycastleman.co.uk, 1 aboutassistedliving.org, 1 aboutmyproperty.ca, 1 abox-kb.com, 1 @@ -552,6 +596,7 @@ abrakidabra.com.br, 1 abrilect.com, 1 abseits.org, 1 absolem.cc, 1 +absolutelyinflatables.co.uk, 1 absoluterush.net, 1 absolutewaterproofingsolutions.com, 1 absolutewebdesigns.com, 1 @@ -560,9 +605,11 @@ absynthe-inquisition.fr, 1 abthorpe.org, 1 abulanov.com, 1 abundent.com, 1 +abuse.fi, 1 abuse.io, 1 abvent.net, 1 abvlbasketviganello.ch, 1 +abyssgaming.eu, 1 abyssproject.net, 1 ac-admin.pl, 1 ac-epmservices.com, 1 @@ -597,6 +644,7 @@ accudraftpaintbooths.com, 1 accwing.com, 1 aceadvisory.biz, 1 acecerts.co.uk, 1 +aceinflatables.com, 1 aceinstituteonline.com, 1 acelpb.com, 1 acemobileforce.com, 1 @@ -612,6 +660,7 @@ acheconcursos.com.br, 1 achenar.net, 1 achow101.com, 1 achromatisch.de, 1 +achterblog.de, 1 achterhoekseveiligheidsbeurs.nl, 1 achterstieg.dedyn.io, 1 achtzehn.eu, 1 @@ -627,6 +676,7 @@ acme.beer, 1 acmexyz123.info, 1 acnpacific.com, 1 aconnor.xyz, 1 +acorncastles.co.uk, 1 acourse.io, 1 acoustique-tardy.com, 1 acperu.ch, 1 @@ -648,6 +698,9 @@ actiontowingroundrock.com, 1 activatemyiphone.com, 1 activateudid.com, 1 active.hu, 0 +activehire.co.uk, 1 +activeleisure.ie, 1 +activityeventhire.co.uk, 1 actorsroom.com, 1 actserv.co.ke, 1 actu-film.com, 1 @@ -683,6 +736,7 @@ adamkostecki.de, 1 adamoutler.com, 1 adamradocz.com, 1 adams.dk, 1 +adamsbouncycastles.co.uk, 1 adamstas.com, 1 adamwallington.co.uk, 1 adamwilcox.org, 1 @@ -721,6 +775,7 @@ adigitali.biz, 1 adimaja.com, 1 adinariversloveschool.com, 1 adiponectinsupplement.info, 1 +adiponectinsupplement.net, 1 adjagu.org, 1 adlershop.ch, 1 adlerweb.info, 1 @@ -759,9 +814,12 @@ adrianajewelry.my, 1 adrianbechtold.de, 1 adriancitu.com, 1 adriancostin.ro, 1 +adrianjensen.com, 1 adrianmejias.com, 1 adrienkohlbecker.com, 1 adrinet.tk, 1 +adsbouncycastles.co.uk, 1 +adtgroup.com, 1 adult.properties, 1 adurra.com, 1 aduvi.de, 1 @@ -782,6 +840,7 @@ advelty.cz, 1 adventistdeploy.org, 1 adventure-inn.com, 1 adventureally.com, 1 +adventureforest.co.nz, 1 adventureforest.de, 0 adventuregamers.com, 1 adventures.de, 1 @@ -819,9 +878,11 @@ aegrel.ee, 1 aehe.us, 1 aelurus.com, 1 aeon.co, 1 +aeon.wiki, 1 aeradesign.com, 1 aerandir.fr, 1 aerelon.de, 0 +aergia.eu, 1 aero-pioneer.com, 1 aertel.ie, 1 aessencia.com.br, 1 @@ -839,6 +900,7 @@ afavre.io, 1 afb24.de, 1 afbeelding.im, 1 afbeeldinguploaden.nl, 1 +affichagepub3.com, 1 affiliateroyale.com, 1 affiliatetest.azurewebsites.net, 1 affilie.de, 1 @@ -846,14 +908,17 @@ affily.io, 1 affinity.vc, 1 affinitysync.com, 1 affordableazdivorce.com, 1 +affordablebouncycastle.co.uk, 1 affordablemudjacking.com, 1 affordablepapers.com, 1 affordableracingparts.com.au, 1 afghan.dating, 1 +afi-business-consulting.com, 1 aficionados.com.br, 1 afinadoronline.com.br, 1 aflamtorrent.com, 1 aflfreebets.com, 1 +aflowershop.ca, 1 afmt.fr, 1 afmtevents.com, 1 afonso.io, 1 @@ -887,6 +952,7 @@ aggr.pw, 1 agiairini.cz, 1 agilebits.com, 1 agilebits.net, 0 +agileecommerce.com.br, 1 agileui.com, 1 agiley.se, 1 agilob.net, 1 @@ -902,6 +968,8 @@ agrarshop4u.de, 1 agrekov.ru, 1 agreor.com, 1 agridir.site, 1 +agrikulturchic.com, 1 +agrilinks.org, 1 agrios.de, 1 agroglass.com.br, 1 agroline.by, 1 @@ -934,6 +1002,7 @@ ai-english.jp, 1 aia.de, 1 aibenzi.com, 1 aicial.com, 1 +aid-web.ch, 1 aidanmontare.net, 1 aide-valais.ch, 1 aiden.link, 1 @@ -960,21 +1029,27 @@ aiois.com, 1 aiphyron.com, 1 air-craftglass.com, 1 air-shots.ch, 1 +air-we-go.co.uk, 1 airbly.com, 1 airbnb.com, 1 airbnbopen.com, 1 +airborne-inflatables.co.uk, 1 airclass.com, 1 aircomms.com, 1 airductclean.com, 0 airdur.eu, 1 airedaleterrier.com.br, 1 +airetvie.com, 1 airfax.io, 1 airhart.me, 1 airhelp.com, 1 airicy.com, 1 airmail.cc, 1 +airmaxinflatables.com, 1 +airmazinginflatables.com, 1 airnow.gov, 1 airpbx.com, 1 +airplay-inflatable-hire.co.uk, 1 airplayradio.nl, 1 airportlimototoronto.com, 1 airpurifierproductsonline.com, 1 @@ -982,6 +1057,7 @@ airsoft.ch, 1 airtimefranchise.com, 1 airvpn.org, 1 airvuz.com, 1 +airwegobouncycastles.co.uk, 1 ais.fashion, 1 aistockcharts.com, 1 aiticon.com, 1 @@ -990,10 +1066,13 @@ aiutodomestico.ch, 1 aivd.lol, 1 aiwdirect.com, 1 aixxe.net, 1 +ajapaik.ee, 1 ajarope.com, 1 +ajbouncycastles.co.uk, 1 ajces.com, 1 ajdiaz.me, 1 ajetaci.cz, 1 +ajeventhire.co.uk, 1 ajibot.com, 1 ajnasz.hu, 1 ak-varazdin.hr, 1 @@ -1010,6 +1089,7 @@ akihito.com, 1 akijo.de, 1 akita-boutique.com, 1 akita-stream.com, 1 +akkbouncycastles.co.uk, 1 akostecki.de, 1 akovana.com, 1 akoww.de, 1 @@ -1047,6 +1127,7 @@ alastairs-place.net, 1 alauda-home.de, 1 alaxyjewellers.co.za, 1 alb-flirt.de, 1 +albbounce.co.uk, 1 albersdruck.de, 1 albertathome.org, 1 albion2.org, 1 @@ -1054,6 +1135,7 @@ alboweb.nl, 1 albuic.tk, 1 alca31.com, 1 alcatelonetouch.us, 1 +alchemia.co.il, 1 alchimic.ch, 1 alcnutrition.com, 1 alcorao.org, 1 @@ -1118,6 +1200,7 @@ alexsergeyev.com, 1 alexsexton.com, 1 alextaffe.com, 1 alextsang.net, 1 +alexvdveen.nl, 1 alexwardweb.com, 1 alexyang.me, 1 alfa-tech.su, 1 @@ -1133,6 +1216,7 @@ aliacraft.net, 1 aliantsoft.pl, 1 alibangash.com, 1 alibip.de, 1 +alice-noutore.com, 1 alicestudio.it, 1 alicetone.net, 1 alicialab.org, 1 @@ -1163,10 +1247,14 @@ all-markup-news.com, 1 all4hardware4u.de, 1 allabout.me, 0 allaboutbelgaum.com, 1 +allaboutfunuk.com, 1 +allactioneventhire.co.uk, 1 allamericanmuslim.com, 1 allamericatrans.com, 1 allangirvan.net, 1 allbenjoy.de, 1 +allbounceandplay.co.uk, 1 +allbouncesurrey.co.uk, 1 allcapa.org, 1 allcarepharmacy.com, 1 allcloud.com, 1 @@ -1198,10 +1286,13 @@ alloutatl.com, 1 allplayer.tk, 1 allpointsblog.com, 1 allproptonline.com, 1 +allroundpvp.net, 1 allscammers.exposed, 1 allsearch.io, 1 allshousedesigns.com, 1 +allsortscastles.co.uk, 1 allstarautokiaparts.com, 1 +allstarpartyinflatables.co.uk, 1 alltheducks.com, 1 allthethings.co.nz, 1 allthings.me, 1 @@ -1218,6 +1309,7 @@ almavios.com, 1 almstrom.org, 1 alnitech.com, 0 alocato.com, 1 +alohapartyevents.co.uk, 1 alpca.org, 1 alpe-d-or.dyn-o-saur.com, 1 alpencam.com, 1 @@ -1228,10 +1320,13 @@ alpertron.com.ar, 1 alpha-assistant.com, 1 alpha-force.net, 1 alpha.ch, 1 +alpha88uat.com, 1 alphabetsigns.com, 1 +alphabouncycastles.co.uk, 1 alphabrock.cn, 1 alphachat.net, 1 alphafiduciaryservices.ch, 1 +alphainflatablehire.com, 1 alphapengu.in, 1 alpharotary.com, 1 alphassl.de, 1 @@ -1243,6 +1338,7 @@ alpinepubliclibrary.org, 1 alqassam.net, 1 alrait.com, 1 alroniks.com, 1 +als-japan.com, 1 alspolska.pl, 1 alstroemeria.org, 1 alt-three.com, 1 @@ -1289,17 +1385,25 @@ amagdic.com, 1 amagical.net, 1 amandasage.ca, 1 amani-kinderdorf.de, 0 +amaranthus.com.ph, 1 amartinz.at, 1 amateri.com, 1 +amateurvoicetalent.com, 1 amazili-communication.com, 1 +amazing-castles.co.uk, 1 amazing-gaming.fr, 1 +amazingbouncycastles.co.uk, 1 amazingfloridagulfhomes.com, 1 +amazinginflatables.co.uk, 1 amb.tf, 1 amberalert.gov, 1 +amberglowleisure.co.uk, 1 +amberlightleisure.com, 1 ambholding-usedcars.be, 1 ambiancestudio.ro, 1 ambiente.one, 1 ambiq.nl, 1 +ambouncyhire.com, 1 ambrosius.io, 1 amcchemical.com, 1 amcfirst.com, 1 @@ -1319,6 +1423,8 @@ americanbio.com, 1 americandistribuidora.com, 1 americanfoundationbr.com, 1 americanmediainstitute.com, 1 +americanoutlawjeepparts.com, 1 +americansforcommunitydevelopment.org, 1 americansportsinstitute.org, 1 americasbasementcontractor.com, 1 americkykongres.cz, 1 @@ -1327,6 +1433,7 @@ amerimarkdirect.com, 1 amerimex.cc, 1 amesvacuumrepair.com, 1 amethystcards.co.uk, 1 +amethystdevelopment.co.uk, 1 ameza.co.uk, 1 ameza.com.mx, 1 ameza.io, 1 @@ -1334,6 +1441,7 @@ ameza.me, 1 ameza.net, 1 amf.to, 1 amg-microwave.com, 1 +amh-entertainments.co.uk, 1 ami-de-bastanes.fr, 1 amicalecanyon.ch, 1 amiciidogrescue.org.uk, 1 @@ -1343,6 +1451,7 @@ amilum.org, 1 aminafrance.com, 1 amineptine.com, 1 amisharingstuff.com, 1 +amministratore.biz, 1 amnesy.fr, 1 amorgos-aegialis.com, 1 amorim.ca, 1 @@ -1354,6 +1463,7 @@ ampleinfographics.com, 1 ams.co.rs, 1 amsportuk.com, 1 amsterdamian.com, 1 +amtentertainments.co.uk, 1 amua.fr, 1 amunoz.org, 1 amuq.net, 1 @@ -1368,6 +1478,7 @@ anadoluefessk.org, 1 anaethelion.fr, 1 anaiscoachpersonal.es, 1 anaisypirueta.es, 1 +anajianu.ro, 1 anakros.me, 0 analangelsteen.com, 1 analgesia.net, 1 @@ -1388,6 +1499,7 @@ anarka.org, 1 anassiriphotography.com, 0 anastasia-shamara.ru, 1 anastasiafond.com, 1 +ancestramil.fr, 1 anchev.net, 1 anchorgrounds.com, 1 anchovy.nz, 0 @@ -1404,6 +1516,7 @@ anderskp.dk, 1 andersonshatch.com, 1 andiplusben.com, 1 andisadhdspot.com, 1 +anditi.com, 1 andre-otto.com, 1 andrea-kiaora.de, 1 andrea-m.me, 1 @@ -1485,13 +1598,17 @@ anginf.de, 1 anglertanke.de, 1 anglictina-sojcak.cz, 1 anglictinasojcak.cz, 1 +anglingactive.co.uk, 1 angrapa.ru, 1 angristan.fr, 1 +angrut.com, 1 angry.im, 1 angrydragonproductions.com, 1 angrysnarl.com, 1 +angryteeth.net, 1 angularjs.org, 1 angusmak.com, 1 +anim.ee, 1 animacurse.moe, 1 animaemundi.be, 1 animal-liberation.com, 1 @@ -1501,6 +1618,7 @@ animalnet.de, 0 animalstropic.com, 1 animaltesting.fr, 1 animationsmusicales.ch, 1 +anime-culture.com, 1 anime.my, 0 anime1.me, 1 anime1.moe, 1 @@ -1543,6 +1661,7 @@ anniversary-cruise.com, 1 annonasoftware.com, 1 annoyingasfuk.com, 1 annrusnak.com, 1 +annsbouncycastles.com, 1 annuaire-jcb.com, 1 annuaire-photographe.fr, 0 anohana.org, 1 @@ -1551,6 +1670,7 @@ anon-next.de, 1 anonboards.com, 1 anoncom.net, 1 anoneko.com, 1 +anonrea.ch, 1 anons.fr, 1 anonukradio.org, 1 anonym-surfen.de, 1 @@ -1570,14 +1690,17 @@ ansermet.net, 1 ansgar-sonntag.de, 1 ansgarsonntag.de, 1 anshumanbiswas.com, 1 +ansichtssache.at, 1 ansogning-sg.dk, 1 anstaskforce.gov, 1 answers-online.ru, 1 antama.nl, 1 antarcti.co, 1 antcas.com, 1 +antecim.fr, 1 antenasmundosat.com.br, 1 antennista.milano.it, 1 +antennista.pavia.it, 1 anthedesign.fr, 1 anthony-rouanet.com, 1 anthonyaires.com, 1 @@ -1606,6 +1729,7 @@ antonellabb.eu, 1 antons.io, 1 antragsgruen.de, 1 anttitenhunen.com, 1 +anulowano.pl, 1 anvartay.com, 1 anwaltsindex.com, 1 anxietyspace.com, 1 @@ -1633,7 +1757,6 @@ aotearoaleaks.org, 1 aovcentrum.nl, 1 ap-swiss.ch, 1 apachehaus.de, 0 -apadrinaunolivo.org, 1 apadvantage.com, 1 aparaatti.org, 1 apartmanicg.me, 1 @@ -1675,8 +1798,10 @@ apk4fun.com, 1 apkoyunlar.club, 1 apl2bits.net, 1 aplikaceproandroid.cz, 1 +aplis-online.de, 1 aplpackaging.co.uk, 1 aplu.fr, 1 +apmpproject.org, 1 apn-dz.org, 1 apn-einstellungen.de, 1 apoil.org, 1 @@ -1704,6 +1829,7 @@ apperio.com, 1 appharbor.com, 1 apple-watch-zubehoer.de, 1 apple.ax, 1 +applejacks-bouncy-castles.co.uk, 1 applelife.ru, 1 applemon.com, 1 appleoosa.com, 1 @@ -1713,6 +1839,7 @@ applesencia.com, 1 applewatch.co.nz, 1 applian.jp, 1 apply.eu, 1 +appmeas.co.uk, 1 appmobile.io, 1 appninjas.com, 1 appointed.at, 1 @@ -1732,6 +1859,7 @@ apptomics.com, 1 apptoutou.com, 1 appuals.com, 1 appui-de-fenetre.fr, 1 +appveyor.com, 1 appzoojoo.be, 1 aprefix.com, 1 apretatuercas.es, 1 @@ -1792,6 +1920,7 @@ arbitrary.ch, 1 arboworks.com, 1 arcadiaeng.com, 1 arcaik.net, 1 +arcbouncycastles.co.uk, 1 arcenergy.co.uk, 1 archii.ca, 1 archimedicx.com, 1 @@ -1819,6 +1948,7 @@ arenlor.com, 1 arenlor.info, 1 arenns.com, 1 arent.kz, 1 +arenzanaphotography.com, 1 ares-trading.de, 0 arethsu.se, 1 arfad.ch, 1 @@ -1832,11 +1962,13 @@ argovpay.com, 1 arian.io, 1 ariba.info, 1 ariege-pyrenees.net, 1 +arieswdd.com, 1 arifp.me, 1 arigato-java.download, 1 arijitdg.net, 1 arikar.eu, 1 arima.co.ke, 1 +arinflatablefun.co.uk, 1 aristocrates.co, 1 aristocratps.com, 1 aritec-la.com, 1 @@ -1876,6 +2008,7 @@ arnaudminable.net, 1 arne-petersen.net, 1 arnesolutions.com, 1 arnetdigital.eu, 0 +arniescastles.co.uk, 1 arnoldkontz-occasions.lu, 1 arnor.org, 1 arnoudraeven.nl, 1 @@ -1905,6 +2038,7 @@ artdeco-photo.com, 1 artegusto.ru, 1 artemicroway.com.br, 1 artemis.re, 1 +arterienundvenen.ch, 1 arteseideias.com.pt, 1 arteshow.ch, 1 arteszr.com, 1 @@ -1918,9 +2052,11 @@ articaexports.com, 1 artik.cloud, 1 artimpact.ch, 1 artioml.net, 1 +artionet.ch, 1 artisanhd.com, 1 artisans-libres.com, 1 artisense.de, 1 +artisticedgegranite.net, 1 artlantis.nl, 1 artleading.ru, 1 artlego.com, 1 @@ -2017,6 +2153,7 @@ asr.li, 1 asr.rocks, 1 asr.solar, 1 asra.gr, 1 +asral7.com, 1 asrob.eu, 0 assdecoeur.org, 1 asseenfromthesidecar.org, 1 @@ -2030,10 +2167,12 @@ assetvault.co.za, 1 assguidesporrentruy.ch, 1 assindia.nl, 1 assistance-personnes-agees.ch, 1 +assistcart.com, 1 assumptionpj.org, 1 assurancesmons.be, 1 asta-bar.de, 0 astaninki.com, 1 +astarbouncycastles.co.uk, 1 astarmathsandphysics.com, 1 astec-informatica.com, 1 astengox.com, 1 @@ -2074,8 +2213,10 @@ atelier-coiffure.ch, 1 atelier-naruby.cz, 1 atelier-viennois-cannes.fr, 1 atelieraphelion.com, 1 +atelierbw.com, 1 atelierdefrancais.ch, 1 atelierdesflammesnoires.fr, 1 +atelierhupsakee.nl, 1 ateliernaruby.cz, 1 ateliernihongo.ch, 1 ateliersantgervasi.com, 1 @@ -2090,6 +2231,7 @@ ath0.org, 1 athena-bartholdi.com, 1 athi.pl, 1 athlin.de, 1 +atigerseye.com, 1 atishchenko.com, 1 atisoft.biz, 1 atisoft.com.tr, 1 @@ -2108,6 +2250,7 @@ atlantichomes.com.au, 1 atlantis-kh.noip.me, 1 atlantischild.hu, 1 atlantiswaterproofing.com, 1 +atlas-5.site, 1 atlas.co, 1 atlaschiropractic.org, 1 atlascultural.com, 1 @@ -2122,6 +2265,8 @@ atom-china.org, 1 atom.solutions, 1 atom86.net, 1 atombase.org, 1 +atomic-bounce.com, 1 +atomicbounce.co.uk, 1 atomism.com, 1 atorcidabrasileira.com.br, 1 atplonline.co, 1 @@ -2152,6 +2297,7 @@ aubergegilly.ch, 1 aubg.org, 1 aubio.org, 1 aubonmanger.fr, 1 +aucklandcastles.co.uk, 1 aucubin.de, 1 audialbuquerqueparts.com, 1 audiblox.co.za, 1 @@ -2215,6 +2361,7 @@ author24.biz, 1 authorsguild.in, 1 autimatisering.nl, 1 auto-anleitung.de, 1 +auto-plus.tn, 1 autoauctionsohio.com, 1 autoauctionsvirginia.com, 1 autobedrijfschalkoort.nl, 1 @@ -2251,10 +2398,13 @@ autozane.com, 1 auvernet.org, 1 auvious.com, 1 auxquatrevents.ch, 1 +av01.tv, 1 ava-creative.de, 0 ava-software.at, 1 avaaz.org, 1 +avabouncehire.co.uk, 1 avacariu.me, 1 +availablecastles.com, 1 avalon-island.ru, 1 avanet.ch, 1 avanovum.de, 1 @@ -2294,9 +2444,11 @@ avvcorda.com, 1 awan.tech, 1 awaremi-tai.com, 1 awaro.net, 1 +awbouncycastlehire.com, 1 awccanadianpharmacy.com, 1 awei.pub, 1 awen.me, 1 +awesomebouncycastles.co.uk, 1 awf0.xyz, 1 awin.la, 1 awk.tw, 1 @@ -2323,12 +2475,16 @@ axrec.de, 1 axtux.tk, 1 axxial.tk, 1 ayatk.com, 1 +aycomba.de, 1 ayesh.me, 1 aykutcevik.com, 1 aylak.com, 1 +aylesburycastlehire.co.uk, 1 aymerick.fr, 1 aymericlagier.com, 1 ayothemes.com, 1 +ayrohq.com, 1 +ayrshirebouncycastlehire.co.uk, 1 ayurveda-mantry.com, 1 ayurveda101.com, 0 az-vinyl-boden.de, 1 @@ -2361,7 +2517,9 @@ b-ticket.ch, 1 b1c1l1.com, 1 b2and.com, 0 b2bmuzikbank.com, 1 +b2bpromoteit.com, 1 b422edu.com, 1 +b4bouncycastles.co.uk, 1 b4z.eu, 1 b64.club, 1 b72.net, 1 @@ -2422,18 +2580,22 @@ badseacoffee.com, 1 baer.im, 0 baer.one, 0 baffinlee.com, 1 +bag.bg, 1 bageez.us, 1 bagelsbakery.com, 0 bageluncle.com, 1 baggy.me.uk, 1 bagheera.me.uk, 1 baglu.com, 1 +bagsofbounce.co.uk, 1 bagspecialist.nl, 1 bah.im, 0 bahnbonus-praemienwelt.de, 1 baifubao.com, 1 baiker.info, 1 bailakomigo.com.br, 1 +baildonbouncycastles.co.uk, 1 +baildonhottubs.co.uk, 1 baileebee.com, 1 bairdzhang.com, 1 baito-j.jp, 1 @@ -2506,8 +2668,10 @@ bankofdenton.com, 1 banksiaparkcottages.com.au, 1 bankstownapartments.com.au, 1 banned-bitches.tk, 1 +bannermarquees.ie, 1 bannisbierblog.de, 1 banri.me, 1 +banxehoi.com, 1 baofengtech.com, 1 baosuckhoedoisong.net, 1 baptistboard.com, 1 @@ -2559,6 +2723,7 @@ bartlamboo.nl, 1 bartula.de, 1 bartzutow.xyz, 1 baruch.me, 1 +bas.co.jp, 1 bascht.com, 1 basculasconfiables.com, 1 base-autonome-durable.com, 1 @@ -2580,6 +2745,7 @@ basnoslovno.com.ua, 1 basnoslovno.ru, 1 bass-pro.ru, 1 bassblog.net, 1 +bassment.ph, 1 bastelzauberwelt.de, 1 bastianstalder.ch, 1 bastiv.com, 1 @@ -2598,6 +2764,7 @@ batook.org, 1 batschu.de, 1 batten.eu.org, 1 batteryservice.ru, 1 +batterystaple.pw, 1 battle-game.com, 1 battleboxx.com, 1 battleofthegridiron.com, 1 @@ -2630,6 +2797,7 @@ bazos.cz, 1 bazos.sk, 1 bazziergraphik.com, 1 bb37roma.it, 1 +bbcastles.com, 1 bbdos.ru, 1 bbgeschenke.ch, 1 bbimarketing.com, 1 @@ -2649,11 +2817,13 @@ bc-bd.org, 1 bc-diffusion.com, 1 bcbulle.ch, 1 bcdonadio.com, 1 +bceventhire.co.uk, 1 bch7al.ma, 1 bck.me, 1 bclogandtimberbuilders.com, 1 bclrk.us, 1 bcmguide.com, 1 +bcmhire.co.uk, 1 bcmlu.org, 1 bcnet.com.hk, 1 bcpc-ccgpfcheminots.com, 1 @@ -2695,6 +2865,7 @@ bebefofuxo.com.br, 1 bebes.uno, 1 bebetrotteur.com, 1 beccajoshwedding.com, 1 +beckenhamcastles.co.uk, 1 beckerantiques.com, 1 becoast.fr, 1 becs.ch, 1 @@ -2706,6 +2877,7 @@ bedfordnissanparts.com, 1 bedlingtonterrier.com.br, 1 bedouille.com, 1 bedrocklinux.org, 1 +bee-line.org.uk, 1 bee.clothing, 1 bee.supply, 1 bee.tools, 1 @@ -2735,8 +2907,11 @@ beersandco.ch, 1 beersconf.com, 1 beeswax-orgone.com, 1 beetgroup.id, 1 +beethoveninlove.com, 1 beetman.net, 1 +beeutifulparties.co.uk, 1 beexfit.com, 1 +beezkneezcastles.co.uk, 1 beeznest.com, 1 befoodsafe.gov, 1 beframed.ch, 1 @@ -2765,6 +2940,7 @@ belastingdienst-in-beeld.nl, 1 belastingmiddeling.nl, 1 belcompany.nl, 0 belegit.org, 1 +belfastbounce.co.uk, 1 belfastlocks.com, 1 belfasttechservices.co.uk, 1 belge.rs, 1 @@ -2781,6 +2957,7 @@ belmontgoessolar.org, 1 belpbleibtbelp.ch, 1 belt.black, 1 belua.com, 1 +belvoirbouncycastles.co.uk, 1 belwederczykow.eu, 1 bely-mishka.by, 1 bemsoft.pl, 1 @@ -2805,6 +2982,7 @@ beneathvt.com, 1 benediktdichgans.de, 1 benepiscinas.com.br, 1 beneri.se, 1 +benevita.life, 1 benfairclough.com, 1 bengalurugifts.com, 1 benhaney.com, 1 @@ -2823,13 +3001,17 @@ benjamins.com, 1 benleemd.com, 1 benmatthews.com.au, 1 benmillett.us, 0 +bennettsbouncycastlehire.co.uk, 1 +bennettshire.co.uk, 1 benni1.eu, 1 bennierobinson.com, 1 bennink.me, 1 benno.frl, 1 bennythink.com, 1 +bensbouncycastles.co.uk, 1 benschnarr.com, 1 benscobie.com, 1 +bensinflatables.co.uk, 1 bentertain.de, 1 bentley.blog, 1 bentley.link, 1 @@ -2889,6 +3071,7 @@ besb66.us, 1 beserberg.tk, 1 beslider.com, 1 bespokestraps.com, 1 +best-of-bounce.co.uk, 1 best-wallpaper.net, 1 best-wedding-quotes.com, 1 best10websitebuilders.com, 1 @@ -2909,6 +3092,8 @@ bestlashesandbrows.hu, 1 bestleftwild.com, 1 bestmodels.su, 1 bestmotherfucking.website, 1 +bestoliveoils.com, 1 +bestpartyhire.com, 1 bestperfumebrands.com, 1 bestschools.top, 1 bestseries.tv, 1 @@ -2929,6 +3114,7 @@ betseybuckheit.com, 1 betsonlinefree.com.au, 1 betsyshilling.com, 1 bett1.de, 1 +better-bounce.co.uk, 1 better.fyi, 1 betterbabyshop.com.au, 1 bettercrypto.org, 1 @@ -2962,11 +3148,13 @@ bexit-security.eu, 1 bexit-security.nl, 1 bexit.nl, 1 bexithosting.nl, 1 +bexleycastles.co.uk, 1 bey.io, 1 beybiz.com, 1 beyond-infinity.org, 1 beyond-rational.com, 1 beyondalderaan.net, 1 +beyondbounce.co.uk, 1 beyondpricing.com, 1 beyondthecode.io, 1 beyondtodaymediagroup.com, 1 @@ -2992,6 +3180,7 @@ bghost.xyz, 1 bgkoleda.bg, 1 bglsingles.de, 1 bgneuesheim.de, 1 +bgp.space, 1 bgtgames.com, 1 bharath-g.in, 1 bhodisoft.com, 1 @@ -3039,11 +3228,18 @@ bierochs.org, 1 bieser.ch, 1 biester.pro, 1 big-andy.co.uk, 1 +big-bounce.co.uk, 1 big-fluglaerm-hamburg.de, 1 bigbluedoor.net, 1 +bigbouncebouncycastles.co.uk, 1 +bigbounceentertainment.co.uk, 1 +bigbouncetheory.co.uk, 1 +bigbounceuk.com, 1 bigclassaction.com, 1 +bigcorporateevents.com, 1 bigdinosaur.org, 1 bigerbio.com, 1 +bigfunbouncycastles.com, 1 biggreenexchange.com, 1 bight.ca, 1 bigio.com.br, 1 @@ -3058,13 +3254,16 @@ bike-discount.de, 1 bike-kurse.ch, 1 bike-shack.com, 1 bikebay.it, 1 +bikelifetvkidsquads.co.uk, 1 biker.dating, 1 bikerebel.com, 1 bikeshopitalia.com, 1 bikiniseli.com, 1 bikkelbroeders.com, 0 bikkelbroeders.nl, 0 +bilalic.com, 1 bilalkilic.de, 1 +bilbayt.com, 1 bilder-designs.de, 1 bildermachr.de, 1 biletru.net, 1 @@ -3083,9 +3282,11 @@ billionkiaparts.com, 1 billogram.com, 1 billpro.com, 0 billpro.com.au, 1 +billrhodesbakery.com, 1 billrobinson.io, 1 billy.pictures, 1 billyoh.com, 1 +billysbouncycastlehire.co.uk, 1 biltullen.com, 1 bimbo.com.ar, 1 bimbobakeriesusa.com, 1 @@ -3110,8 +3311,10 @@ binhex.net, 1 binimo.com, 1 binkconsulting.be, 1 binsp.net, 1 +bio-disinfestazione.it, 1 biobuttons.ch, 1 biocrafting.net, 1 +biodiagnostiki.clinic, 1 biodieseldata.com, 1 bioemsan.cz, 1 biogecho.ch, 1 @@ -3149,6 +3352,7 @@ birdymanbestreviews.com, 1 birgit-rydlewski.de, 1 birkengarten.ch, 1 birkhoff.me, 1 +birminghamcastlehire.co.uk, 1 birminghamsunset.com, 1 birthdaytip.com, 1 birthmatters.us, 1 @@ -3202,6 +3406,7 @@ bitedge.com, 1 bitenose.com, 1 bitex.la, 1 bitfasching.de, 1 +bitfehler.net, 1 bitfinder.nl, 1 bitfuse.net, 1 bitgo.com, 1 @@ -3227,6 +3432,7 @@ bitref.com, 1 bitroll.com, 1 bitrush.nl, 1 bitsafe.com.my, 1 +bitsburg.ru, 1 bitsensor.io, 1 bitshaker.net, 1 bitskins.co, 1 @@ -3236,6 +3442,7 @@ bitstorm.org, 1 bitsum.com, 1 bitsync.nl, 1 bittersweetcandybowl.com, 1 +bittervault.xyz, 1 bittmann.me, 0 bittylicious.com, 1 bituptick.com, 1 @@ -3257,12 +3464,15 @@ biztera.com, 1 biztok.eu, 1 bizzartech.com, 1 bizzi.tv, 1 +bizzybeebouncers.co.uk, 1 bjarnerest.de, 1 bjgongyi.com, 1 bjornhelmersson.se, 1 bjornjohansen.no, 1 +bjsbouncycastles.com, 1 bjtxl.cn, 1 bkhpilates.co.uk, 1 +bkositspartytime.co.uk, 1 bl4ckb0x.biz, 1 bl4ckb0x.com, 1 bl4ckb0x.de, 1 @@ -3290,12 +3500,14 @@ blablacar.rs, 1 blablacar.ru, 1 black-gay-porn.biz, 1 black-khat.com, 1 +black-mail.nl, 1 black-raven.fr, 1 black.dating, 1 black.host, 1 blackandpony.de, 1 blackapron.com.br, 1 blackbag.nl, 1 +blackbase.de, 1 blackberrycentral.com, 1 blackberryforums.be, 1 blackcat.ca, 1 @@ -3329,7 +3541,9 @@ blakecoin.org, 1 blameomar.com, 1 blancodent.com, 1 blankersfamily.com, 1 +blastentertainment.com.au, 1 blastersklan.com, 1 +blastzoneentertainments.co.uk, 1 blaudev.es, 1 blauerhunger.de, 1 blayne.me, 1 @@ -3362,6 +3576,8 @@ blinkspeed.eu, 1 blio.tk, 1 blissjoe.com, 1 blissplan.com, 1 +blivawesome.dk, 1 +blivvektor.dk, 1 blizhost.com, 1 blizhost.com.br, 1 blizz.news, 1 @@ -3391,7 +3607,9 @@ blogdimoda.com, 1 blogdimotori.it, 1 blogging-life.com, 1 bloggingwithchildren.com, 1 +bloggytalky.com, 1 bloginbeeld.nl, 1 +bloglife-bb.com, 1 blognone.com, 1 blogom.at, 1 blogonblogspot.com, 1 @@ -3452,8 +3670,10 @@ bmros.com.ar, 1 bmw-motorradclub-seefeld.de, 1 bn1digital.co.uk, 1 bnb-buddy.nl, 1 +bnbsinflatablehire.co.uk, 1 bngsecure.com, 1 bnin.org, 1 +bnjscastles.co.uk, 1 bnstree.com, 1 bnty.net, 1 boardgamegeeks.de, 1 @@ -3465,6 +3685,7 @@ bobep.ru, 1 bobiji.com, 1 bobisec.cz, 1 bobkoetsier.nl, 1 +bobnbouncedublin.ie, 1 boboates.com, 1 boboolo.com, 1 bobstronomie.fr, 1 @@ -3499,6 +3720,7 @@ bokeyy.com, 1 boldmediagroup.com, 1 boldt-metallbau.de, 1 bolektro.de, 1 +bolivarfm.com.ve, 1 bollywood.uno, 1 bolt.cm, 0 bolwerk.com.br, 1 @@ -3537,6 +3759,7 @@ boobox.xyz, 1 boodaah.com, 1 boodmo.com, 1 boof.com, 0 +boogiebouncecastles.co.uk, 1 book-in-hotel.com, 1 book-of-ra.de, 1 bookingapp.nl, 1 @@ -3564,11 +3787,13 @@ booox.org, 1 booox.pw, 1 booq.org, 1 booquiz.com, 1 +boosinflatablegames.co.uk, 1 booter.es, 1 booter.pw, 1 bootikexpress.fr, 1 boozinyan.com, 1 bopera.co.uk, 1 +bopp.org, 1 borahan.net, 1 borchers-media.de, 1 borg.cloud, 1 @@ -3577,6 +3802,7 @@ borisavstankovic.rs, 1 borisbesemer.com, 1 borisschapira.com, 1 born-to-learn.com, 1 +born2bounce.co.uk, 1 bornandgrazed.com, 1 bornfiber.dk, 1 bornhack.dk, 1 @@ -3606,13 +3832,122 @@ boueki.jp, 1 boueki.org, 1 bougeret.fr, 1 boukoubengo.com, 1 +bounce-a-mania.co.uk, 1 +bounce-a-roo.co.uk, 1 +bounce-abouts.com, 1 +bounce-n-go.co.uk, 1 +bounce-on.co.uk, 1 +bounce-r-us.co.uk, 1 +bounce-xtreme.co.uk, 1 +bounce4fun.co.uk, 1 +bounce4fun.ie, 1 +bounce4kidz.com, 1 +bounce4less.ie, 1 +bouncea-bout.com, 1 +bounceaboutandplay.co.uk, 1 +bounceaboutnewark.co.uk, 1 +bounceaboutsussex.co.uk, 1 +bouncealotcastlehire.co.uk, 1 +bouncealotnorthwest.co.uk, 1 +bounceandwobble.co.uk, 1 bounceapp.com, 1 +bouncearoundevents.co.uk, 1 +bouncearoundsheffield.co.uk, 1 +bounceawaycastles.com, 1 +bouncebackcastles.co.uk, 1 +bouncebeyondcastles.co.uk, 1 +bouncebookings.com.au, 1 +bouncecrazy.ie, 1 +bouncehighpeak.co.uk, 1 +bouncejumpboston.co.uk, 1 +bouncekingdom.co.uk, 1 +bouncelanduk.co.uk, 1 +bouncemania.org, 1 +bouncemaniaevents.co.uk, 1 +bouncemaniainflatables.co.uk, 1 +bouncemasters.co.uk, 1 +bouncemonkeys.co.uk, 1 +bouncenortheast.co.uk, 1 +bouncenpaint.co.uk, 1 +bouncenslidenortheast.co.uk, 1 +bouncepartycastles.com, 1 +bounceroosevents.co.uk, 1 +bouncers-bouncycastlehire.co.uk, 1 +bouncesouthwales.co.uk, 1 +bouncesquad.co.uk, 1 +bouncetasticuk.co.uk, 1 +bouncetheparty.co.uk, 1 +bounceunlimited.co.uk, 1 +bouncewithbovells.com, 1 +bouncewrightcastles.co.uk, 1 +bouncincastles.co.uk, 1 +bouncing-bugs.co.uk, 1 +bouncing4joy.co.uk, 1 +bouncingbairnsinflatables.co.uk, 1 +bouncingbeansinflatables.co.uk, 1 +bouncingbobsinflatables.co.uk, 1 +bouncingbuddiesleicester.co.uk, 1 +bouncingbuzzybees.co.uk, 1 +bouncinghigher.co.uk, 1 +bouncingscotland.com, 1 bouncourseplanner.net, 1 +bouncy-castles-surrey.co.uk, 1 +bouncy-tots.co.uk, 1 +bouncybaileys.co.uk, 1 bouncyball.eu, 0 bouncyballs.org, 1 +bouncyballscastles.co.uk, 1 +bouncybouncyboocastlehire.co.uk, 1 +bouncycastle.net.au, 1 +bouncycastleandparty.co.uk, 1 +bouncycastlehire-norwich.com, 1 +bouncycastlehire-sheffield.co.uk, 1 +bouncycastlehireauckland.co.nz, 1 +bouncycastlehirebarnstaple.co.uk, 1 +bouncycastlehirebexley.co.uk, 1 +bouncycastlehirechelmsford.org.uk, 1 +bouncycastlehirehull.co.uk, 1 +bouncycastlehireinglasgow.co.uk, 1 +bouncycastlehirelouth.co.uk, 1 +bouncycastlehiremalvern.co.uk, 1 +bouncycastlehireoldham.co.uk, 1 +bouncycastlehirestroud.co.uk, 1 +bouncycastlehiresurrey.co.uk, 1 +bouncycastlehiretameside.co.uk, 1 +bouncycastlehirewinchester.co.uk, 1 +bouncycastleman.co.uk, 1 +bouncycastlemangloucestershire.co.uk, 1 +bouncycastleparade.com, 1 +bouncycastles.me, 1 +bouncycastlesgalway.com, 1 +bouncycastleshire.co.uk, 1 +bouncycastleshireleeds.co.uk, 1 +bouncycastlesin.co.uk, 1 +bouncycastlesinderby.co.uk, 1 +bouncycastlesinleeds.co.uk, 1 +bouncycastlesisleofwight.co.uk, 1 +bouncycastlesmonaghan.com, 1 +bouncycastlessheerness.co.uk, 1 +bouncydays.co.uk, 1 +bouncyfeet.co.uk, 1 +bouncygiggles.com.au, 1 +bouncyhigher.co.uk, 1 +bouncyhousecastlehire.co.uk, 1 +bouncyhouses.co.uk, 1 +bouncykingdom.co.uk, 1 +bouncykings.co.uk, 1 +bouncykingsnortheast.co.uk, 1 +bouncymacs.co.uk, 1 +bouncymadness.com, 1 +bouncyrainbows.co.uk, 1 +bouncytime.co.uk, 1 +bouncytown.co.uk, 1 +bouncywouncy.co.uk, 1 +bound2bounce.co.uk, 1 bountyfactory.io, 1 bourasse.fr, 1 bourdon.fr.eu.org, 1 +bournefun.co.uk, 1 bourqu.in, 1 bourse-aux-jouets.org, 0 bourse-aux-vetements.org, 0 @@ -3638,6 +3973,7 @@ bowntycdn.net, 1 boxdevigneron.fr, 1 boxing-austria.eu, 1 boxit.es, 1 +boxlitepackaging.com, 1 boxpirates.to, 1 boxvergelijker.nl, 1 boxview.com, 1 @@ -3646,6 +3982,7 @@ boyhost.cn, 1 boypoint.de, 1 boz.nl, 1 bozemancarpetcleaningservices.com, 1 +bozosbouncycastles.co.uk, 1 bpadvisors.eu, 1 bpaste.net, 1 bpastudies.org, 1 @@ -3660,6 +3997,8 @@ braams.nl, 1 bracho.xyz, 1 bracoitaliano.com.br, 1 bradbrockmeyer.com, 1 +bradfordhottubhire.co.uk, 1 +bradfordmascots.co.uk, 1 bradkovach.com, 1 bradler.net, 1 bradlinder.org, 1 @@ -3670,6 +4009,7 @@ bragaweb.com.br, 1 brage.info, 1 brahmins.com, 1 brahmstaedt.de, 1 +braiampeguero.xyz, 1 brailsford.xyz, 1 brain-e.co, 1 brain-force.ch, 1 @@ -3683,14 +4023,17 @@ brainserve.com, 1 brainserve.swiss, 1 brainster.co, 1 braintensive.com, 1 +braintreebouncycastles.com, 1 brainvoyagermusic.com, 1 brakemanpro.com, 1 brakstad.org, 1 bralnik.com, 1 brambogaerts.nl, 1 +bramhallsamusements.com, 1 bramvanaken.be, 1 bran.land, 1 branchzero.com, 1 +brandbil.dk, 1 brandbuilderwebsites.com, 1 brandcodeconsulting.com, 1 brandcodestyle.com, 1 @@ -3699,6 +4042,7 @@ brandongomez.me, 1 brandonhubbard.com, 1 brandons.site, 1 brandonwalker.me, 1 +brandstead.com, 1 brandtrapselfie.nl, 1 brandweeruitgeest.nl, 1 branw.xyz, 1 @@ -3711,6 +4055,8 @@ brasspipedreams.org, 1 bratislava-airport-taxi.com, 1 bratteng.me, 0 bratvanov.com, 1 +brau-ingenieur.de, 1 +braudoktor.de, 1 brauingenieur.de, 1 braunsteinpc.com, 1 braunwarth.info, 1 @@ -3786,13 +4132,16 @@ bridgeout.com, 1 bridgingdirectory.com, 1 brie.tech, 1 briefhansa.de, 1 +brighouse-leisure.co.uk, 1 brightfuturemadebyme.com, 1 brightonbank.com, 1 +brightonbouncycastles.net, 1 brightonchilli.org.uk, 1 brightstarkids.co.uk, 0 brightstarkids.net, 0 brightstarkids.sg, 0 brigidaarie.com, 1 +brilliantbouncyfun.co.uk, 1 brilliantdecisionmaking.com, 1 brilliantproductions.co.nz, 1 brinkhu.is, 1 @@ -3802,6 +4151,7 @@ brio-shop.ch, 1 brio-ukraine.store, 1 brisbanelogistics.com.au, 1 bristebein.com, 1 +bristolandwestonsuperbounce.com, 1 britelocate.com, 1 britishbeef.com, 1 britishbookmakers.co.uk, 1 @@ -3812,6 +4162,7 @@ britishscienceweek.org, 1 britneyclause.com, 1 britton-photography.com, 1 brivadois.ovh, 1 +brmascots.com, 1 brmsalescommunity.com, 1 brn.by, 1 bro.hk, 1 @@ -3890,10 +4241,14 @@ btserv.de, 1 btsoft.eu, 1 btsow.com, 1 btth.pl, 1 +btth.tv, 1 +btth.xyz, 1 btxiaobai.com, 1 bubba.cc, 1 bubblegumblog.com, 1 bubblespetspa.com, 1 +bubblinghottubs.co.uk, 1 +bubblybouncers.co.uk, 1 bubhub.io, 1 buch-angucken.de, 1 buck.com, 1 @@ -3907,8 +4262,10 @@ budeanu.com, 1 buderus-family.be, 1 budger.nl, 1 budgetalk.com, 1 +budgetcastlehire.co.uk, 1 budgetenergievriendenvoordeel.nl, 1 budgetlovers.nl, 1 +budgiesballoons.com, 1 budntod.com, 1 budolfs.de, 1 buehnenbande.ch, 0 @@ -3937,6 +4294,7 @@ building-cost-estimators.com, 1 buildingcostestimators.co.uk, 1 builditsolutions.net, 1 buildkite.com, 1 +builmaker.com, 1 builtvisible.com, 1 builtwith.com, 1 buka.jp, 1 @@ -3952,6 +4310,7 @@ bulktrade.de, 1 bulkwholesalesweets.co.uk, 1 bullbits.com, 1 bulldog-hosting.de, 1 +bulldoghire.co.uk, 1 bulledair-savons.ch, 1 bulletbabu.com, 0 bullettags.com, 1 @@ -3981,6 +4340,7 @@ burke.services, 1 burlapsac.ca, 1 burlesquemakeup.com, 1 burnerfitness.com, 1 +burnhamonseabouncycastles.co.uk, 1 burningbird.net, 1 burningflipside.com, 0 burntfish.com, 1 @@ -4011,10 +4371,12 @@ businessimmigration-eu.ru, 1 businessmodeler.se, 1 bustadice.com, 1 bustimes.org.uk, 1 +bustup-tips.com, 1 butarque.es, 1 buthowdoyoubuygroceries.com, 1 butikvip.ru, 1 buttercupstraining.co.uk, 1 +buttermilk.cf, 1 buttonline.ch, 1 buturyu.net, 1 buturyu.org, 1 @@ -4027,6 +4389,7 @@ buyessays.net, 1 buyessayscheap.com, 1 buyharpoon.com, 1 buyinginvestmentproperty.com, 1 +buyingsellingflorida.com, 1 buypapercheap.net, 1 buyseo.store, 1 buyshoe.org, 1 @@ -4038,6 +4401,7 @@ buzzprint.it, 1 bvalle.com, 1 bvexplained.co.uk, 1 bvionline.eu, 1 +bvl.aero, 1 bw.codes, 1 bwcscorecard.org, 1 bwh1.net, 1 @@ -4084,12 +4448,14 @@ bytesunlimited.com, 1 bytesystems.com, 1 byteturtle.eu, 1 bythisverse.com, 1 +byvshie.com, 1 bziaks.xyz, 1 bzsparks.com, 1 bztech.com.br, 1 bzv-fr.eu, 1 c-aeroconsult.com, 1 c-path.org, 1 +c-rom.fr, 1 c-rtx.com, 1 c-shock.org, 1 c-webdesign.net, 1 @@ -4122,6 +4488,7 @@ cacao.supply, 1 cacaolalina.com, 1 cacaumidade.com.br, 1 caceis.bank, 1 +cachetagalong.com, 1 cachethq.io, 1 cackette.com, 1 cadenadg.gr, 1 @@ -4131,6 +4498,7 @@ cadman.pw, 1 cadooz.com, 1 cadorama.fr, 1 cadoth.net, 1 +cadsys.net, 1 cadusilva.com, 1 caerostris.com, 1 caesarkabalan.com, 1 @@ -4162,6 +4530,7 @@ calculatoaresecondhand.xyz, 1 calculator-imt.com, 1 calculator.tf, 1 calcworkshop.com, 1 +caldecotevillagehall.co.uk, 1 calebmorris.com, 0 calendarsnow.com, 1 caletka.cz, 1 @@ -4189,6 +4558,7 @@ camaya.net, 1 cambier.org, 1 cambiowatch.ch, 1 cambodian.dating, 1 +cambridgebouncers.co.uk, 1 camconn.cc, 1 camda.online, 1 camel2243.com, 1 @@ -4235,8 +4605,10 @@ cancerdata.nhs.uk, 1 cancreate.nl, 1 candicecity.com, 1 candidasa.com, 1 +candlcastles.co.uk, 1 cando.eu, 1 candy-it.de, 1 +candykidsentertainment.co.uk, 1 candylion.rocks, 1 candyout.com, 1 canhazip.com, 1 @@ -4249,6 +4621,7 @@ cannyfoxx.me, 1 canoonic.se, 1 cantatio.ch, 1 canterberry.cc, 1 +canterburybouncycastlehire.co.uk, 1 cantrack.com, 1 canva-dev.com, 1 canva.com, 1 @@ -4275,6 +4648,7 @@ capitalp.jp, 1 capitalquadatv.org.nz, 1 capitaltg.com, 1 capitolpathways.org, 1 +caplinbouncycastles.co.uk, 1 capper.de, 1 capriccio.to, 1 caprichosdevicky.com, 1 @@ -4351,6 +4725,7 @@ carlmjohnson.net, 1 carloshmm.stream, 1 carlosjeurissen.com, 1 carlovanwyk.com, 1 +carlsbouncycastlesandhottubs.co.uk, 1 carnaticalifornia.com, 1 carnet-du-voyageur.com, 1 carnildo.com, 1 @@ -4362,6 +4737,7 @@ caroli.com, 1 caroli.info, 1 caroli.name, 1 caroli.net, 1 +carrando.com, 1 carrando.de, 1 carre-lutz.com, 1 carredejardin.com, 1 @@ -4375,6 +4751,7 @@ carterorland.com, 1 cartesentreprises-unicef.fr, 1 carthedral.com, 1 carto.la, 1 +cartooncastles.ie, 1 cartoonhd.cc, 1 cartouche24.eu, 1 cartucce24.it, 1 @@ -4387,10 +4764,12 @@ casa-su.casa, 1 casadoarbitro.com.br, 1 casadowifi.com.br, 1 casajardininsecticidas.com, 1 +casalindamex.com, 1 casamariposaspi.com, 1 casamorelli.com.br, 1 casapalla.com.br, 1 casashopp.com.br, 1 +casasuara.com, 1 casasuleletrodomesticos.com.br, 1 casbia.info, 1 casbuijs.nl, 1 @@ -4410,13 +4789,24 @@ casinolistings.com, 1 casinoreal.com, 1 casjay.cloud, 1 casjay.com, 1 +casjay.info, 1 casjay.us, 1 casjaygames.com, 1 casperpanel.com, 1 caspicards.com, 1 cassimo.com, 1 +castlecapers.com.au, 1 castlecms.io, 1 castlejackpot.com, 1 +castleking.net, 1 +castlekingdomstockport.co.uk, 1 +castlekingkent.co.uk, 1 +castleparty.co.uk, 1 +castles-in-the-sky.co.uk, 1 +castles4kidz.com, 1 +castles4rascalsiow.co.uk, 1 +castlesrus-kent.com, 1 +castleswa.com.au, 1 cat-blum.com, 1 cat-box.de, 1 cat.net, 1 @@ -4438,6 +4828,7 @@ catharinesomerville.com, 1 catharisme.eu, 1 catharisme.net, 1 catharisme.org, 1 +catherinescastles.co.uk, 1 catholics.dating, 1 cathosa.nl, 1 cativa.net, 1 @@ -4462,6 +4853,7 @@ caylercapital.com, 1 cazes.info, 1 cbamo.org, 1 cbbank.com, 1 +cbc-hire.co.uk, 1 cbd.supply, 1 cbdev.de, 1 cbecrft.net, 1 @@ -4486,6 +4878,7 @@ ccv.nl, 1 cd-sport.com, 1 cd.search.yahoo.com, 0 cda-aigle.ch, 1 +cda-nw.co.uk, 1 cdasiaonline.com, 1 cdbf.ch, 1 cdburnerxp.se, 1 @@ -4533,11 +4926,13 @@ cencalvia.org, 1 censurfridns.dk, 1 censurfridns.nu, 1 censys.io, 1 +centaur.de, 1 centennialradon.com, 1 centerforpolicy.org, 1 centerpereezd.ru, 0 centerpoint.ovh, 1 centillien.com, 0 +centio.bg, 1 centos.pub, 1 centos.tips, 1 central4.me, 1 @@ -4566,6 +4961,7 @@ ceres-corp.org, 1 ceres1.space, 1 cermak.photos, 1 cerpa.com.br, 1 +cerpus-course.com, 1 cerstve-korenie.sk, 1 cerstvekorenie.sk, 1 cert.or.id, 1 @@ -4602,6 +4998,7 @@ cfh.com, 1 cfneia.org, 1 cfno.org, 1 cfo.gov, 1 +cfsh.tk, 1 cftcarouge.com, 1 cfxdesign.com, 1 cg-systems.hu, 1 @@ -4618,7 +5015,9 @@ ch-sc.de, 1 ch.search.yahoo.com, 0 chabaojia.com, 1 chabaudparfum.com, 1 +chabert-provence.fr, 1 chad.ch, 1 +chadklass.com, 1 chadstoneapartments.com.au, 1 chaifeng.com, 1 chainedunion.info, 1 @@ -4626,16 +5025,21 @@ chaisystems.net, 1 chaldeen.pro, 1 chaletmanager.com, 1 chaletpierrot.ch, 1 +chaleur.com, 1 chalker.io, 1 chalkfestival.org, 0 challengeblog.org, 1 challengeskins.com, 1 chamathellawala.com, 1 chambion.ch, 1 +chameleon-ents.co.uk, 1 chameth.com, 1 chamilo.org, 1 champ.dog, 1 +champdogs.co.uk, 1 +champdogs.com, 1 champicreuse.fr, 1 +championcastles.ie, 1 championnat-romand-cuisiniers-amateurs.ch, 1 champions.co, 1 championweb.com.au, 1 @@ -4645,6 +5049,7 @@ chandr1000.ga, 1 changecopyright.ru, 1 changelab.cc, 1 changesfor.life, 1 +changethislater.com, 1 chanissue.com, 0 channeladam.com, 1 channelcards.com, 1 @@ -4652,10 +5057,12 @@ channellife.asia, 1 channellife.co.nz, 1 channellife.com.au, 1 chanoyu-gakkai.jp, 1 +chanshiyu.com, 1 chantalguggenbuhl.ch, 1 chanz.com, 1 chaos-inc.de, 1 chaos.run, 1 +chaoscastles.co.uk, 1 chaoschemnitz.de, 1 chaosdorf.de, 1 chaosfield.at, 1 @@ -4663,6 +5070,7 @@ chaoslab.org, 1 chaospott.de, 1 chaoticlaw.com, 1 chaouby.com, 1 +chapelfordbouncers.co.uk, 1 chaplain.co, 1 charakato.com, 1 charbonnel.eu, 1 @@ -4694,6 +5102,7 @@ chartpen.com, 1 chartsy.de, 1 charuru.moe, 1 chasafilli.ch, 1 +chaseandzoey.de, 1 chaseganey.com, 1 chat-libera.org, 1 chat-senza-registrazione.net, 1 @@ -4760,26 +5169,37 @@ checktype.com, 1 checkui.com, 1 checkyourmath.com, 1 checkyourprivilege.org, 1 +checos.co.uk, 1 cheddarpayments.com, 1 +cheekycharliessoftplay.co.uk, 1 +cheekylittlerascals.co.uk, 1 +cheekymonkeysinflatables.co.uk, 1 cheeseemergency.co.uk, 1 cheesefusion.com, 1 +cheesypicsbooths.co.uk, 1 cheetahwerx.com, 1 cheez.systems, 1 +chehalemgroup.com, 1 chellame.com, 1 chellame.fr, 1 chelseafs.co.uk, 1 +cheltenhambounce.co.uk, 1 +cheltenhambouncycastles.co.uk, 1 cheltik.ru, 1 chemicalguys-ruhrpott.de, 1 chenapartment.com, 1 chengl.com, 1 +chengtongled.com, 1 chenky.com, 1 chennien.com, 1 chentianyi.cn, 1 chenzhekl.me, 1 cherevoiture.com, 1 cherrett.digital, 1 +cherrydropscandycarts.co.uk, 1 cherryonit.com, 1 cherrywoodtech.com, 1 +chertseybouncycastles.co.uk, 1 chesspoint.ch, 1 chessreporter.nl, 1 chesterbrass.uk, 1 @@ -4789,6 +5209,7 @@ chewey.de, 1 chewey.org, 1 chez-janine.de, 1 chez-oim.org, 1 +chez.moe, 1 chfr.search.yahoo.com, 0 chhory.com, 1 chhy.at, 1 @@ -4809,6 +5230,8 @@ childrenandmedia.org.au, 1 childrendeservebetter.org, 1 childrenfirstalways.org, 1 childreninadversity.gov, 1 +childrensentertainmentleicester.co.uk, 1 +childrenspartiesrus.com, 1 chilihosting.eu, 1 chillebever.nl, 1 chima.net, 1 @@ -4841,9 +5264,11 @@ chit.search.yahoo.com, 0 chloe.re, 1 chloeallison.co.uk, 1 chloehorler.com, 1 +chloescastles.co.uk, 1 chmsoft.com.ua, 1 chmsoft.ru, 1 chmurakotori.ml, 1 +choc-o-lush.co.uk, 1 chocodecor.com.br, 1 chocolah.com.au, 0 chocolat-suisse.ch, 1 @@ -4888,8 +5313,10 @@ chrispstreet.com, 1 chrisshort.net, 0 christadelphiananswers.org, 1 christadelphians.eu, 1 +christchurchbouncycastles.co.uk, 1 christensenplace.us, 1 christiaanconover.com, 1 +christian-gredig.de, 1 christian-host.com, 1 christian-liebel.com, 1 christianbargon.de, 0 @@ -4907,12 +5334,14 @@ christianscholz.de, 1 christianscholz.eu, 1 christiesantiques.com, 1 christmascard.be, 1 +christmaspartyhire.co.uk, 1 christoph-conrads.name, 1 christophebarbezat.ch, 1 christopher-simon.de, 1 christopherburg.com, 1 christopherl.com, 1 christopherpritchard.co.uk, 1 +christophersole.com, 1 christophertruncer.com, 1 christophkreileder.com, 1 christophsackl.de, 1 @@ -4933,6 +5362,7 @@ chromiumcodereview.appspot.com, 0 chronic101.xyz, 1 chroniclesofgeorge.com, 1 chronogram.me, 1 +chronology.no, 1 chronoproject.com, 1 chronoshop.cz, 1 chrpaul.de, 1 @@ -4995,6 +5425,7 @@ cinto.cc, 1 cio.gov, 1 cioscloud.com, 1 cip.md, 1 +cipartyhire.co.uk, 1 cipher.co.th, 1 cipher.land, 1 cipherboy.com, 1 @@ -5008,9 +5439,11 @@ circara.com, 1 circlebox.rocks, 1 circu.ml, 1 cirfi.com, 1 +ciri.com.co, 1 cirope.com, 1 cirrus0.de, 1 cirugiasplasticas.com.mx, 1 +cirujanooral.com, 1 cirurgicagervasio.com.br, 1 cirurgicalucena.com.br, 1 ciscodude.net, 1 @@ -5066,12 +5499,15 @@ claimconnect.us, 1 claimnote.com, 1 clairegold.com, 1 claireidrac.fr, 1 +clairescastles.co.uk, 1 +clanebouncycastles.com, 1 clanrose.org.uk, 1 clanthor.com, 1 clanwarz.com, 1 clapping-rhymes.com, 1 claretandbanter.uk, 1 clarkeaward.com, 1 +clarksgaragedoorrepair.com, 1 clashersrepublic.com, 1 classdojo.com, 1 classicalpilates.ca, 1 @@ -5085,9 +5521,12 @@ clawe.de, 1 clayandcottonkirkwood.com, 1 claytoncondon.com, 1 cldly.com, 1 +cleanbrowsing.org, 1 cleancode.club, 1 +clear.ml, 1 clearblueday.co.uk, 1 clearchatsandbox.com, 1 +clearip.com, 1 clearkonjac.com, 1 clearsettle-admin.com, 1 clearviewwealthprojector.com.au, 1 @@ -5104,6 +5543,7 @@ click-licht.de, 1 clickclock.cc, 1 clickenergy.com.au, 1 clickforclever.com, 1 +clickomobile.com, 1 clickphish.com, 1 clicks.co.za, 1 clicktenisdemesa.com.br, 1 @@ -5132,6 +5572,7 @@ clnnet.ch, 1 clochix.net, 1 clockcaster.com, 1 clockworksms.com, 1 +cloghercastles.co.uk, 1 clojurescript.ru, 1 cloppenburg-autmobil.com, 1 cloppenburg-automobil.com, 1 @@ -5151,6 +5592,7 @@ cloud.google.com, 1 cloud.gov, 1 cloud2go.de, 1 cloud42.ch, 1 +cloud9bouncycastlehire.com, 1 cloudapps.digital, 1 cloudbased.info, 1 cloudbasedsite.com, 1 @@ -5164,6 +5606,7 @@ cloudflareonazure.com, 1 cloudia.org, 1 cloudily.com, 1 cloudimproved.com, 1 +cloudkit.pro, 1 cloudlight.biz, 1 cloudmigrator365.com, 1 cloudnote.cc, 1 @@ -5176,8 +5619,10 @@ cloudpengu.in, 1 cloudpipes.com, 1 cloudsecurityalliance.org, 1 cloudservice.io, 1 +cloudsocial.io, 1 cloudspace-analytics.com, 1 cloudspeedy.net, 1 +cloudspire.net, 1 cloudteam.de, 1 cloudtropia.de, 1 cloudtskr.com, 1 @@ -5185,6 +5630,7 @@ cloudup.com, 1 cloudwarez.xyz, 1 clouz.de, 1 cloveros.ga, 1 +clownaroundbouncycastles.co.uk, 1 clownindeklas.nl, 1 clownish.co.il, 1 cloxy.com, 1 @@ -5232,6 +5678,7 @@ cms-weble.jp, 1 cmskeyholding.co.uk, 1 cmskeyholding.com, 1 cmskh.co.uk, 1 +cmusical.es, 1 cmweller.com, 1 cmylife.nl, 1 cn.search.yahoo.com, 0 @@ -5262,6 +5709,7 @@ coatl-industries.com, 1 cobalt.io, 1 cobaltgp.com, 1 cobaltlp.com, 1 +cobracastles.co.uk, 1 cocaine-import.agency, 1 cocaine.ninja, 1 cocalc.com, 1 @@ -5280,6 +5728,7 @@ cocoaheads.at, 0 cocoamexico.com, 1 cocodemy.com, 1 coconutoil24.com, 1 +cocoscastles.co.uk, 1 cocquyt-usedcars.be, 1 coda.moe, 1 coda.today, 1 @@ -5328,6 +5777,7 @@ codeversetech.com, 1 codewild.de, 1 codewiz.xyz, 1 codeyellow.nl, 1 +codific.eu, 1 coding.lv, 1 coding.net, 1 codingforspeed.com, 1 @@ -5363,6 +5813,7 @@ coinlist.co, 0 coinloan.io, 1 coinmewallet.com, 1 coinpit.io, 1 +coisasdaterra.com, 1 coisasdemulher.org, 1 cojo.eu, 1 col.la, 1 @@ -5419,7 +5870,10 @@ colorcentertoner.com.br, 1 colorcodedlyrics.com, 1 colorectalcompounding.com, 1 coloringnotebook.com, 1 +coloristcafe.com, 1 colorsbycarin.com, 1 +colossal-events.co.uk, 1 +colourfulcastles.co.uk, 1 colson-occasions.be, 1 columbuswines.com, 1 colyakootees.com, 1 @@ -5429,6 +5883,7 @@ comarkinstruments.net, 1 combatshield.cz, 1 combron.nl, 1 comchezmeme.com, 1 +comcol.nl, 1 comdotgame.com, 1 comdurav.com, 1 comefollowme2016.com, 1 @@ -5437,6 +5892,7 @@ comercialtrading.eu, 1 comerford.net, 1 comeseetv.com, 1 comestoarra.com, 1 +cometbot.cf, 1 cometcache.com, 1 cometonovascotia.ca, 1 comff.net, 1 @@ -5469,6 +5925,7 @@ comocurarlashemorroides.org, 1 comocurarlashemorroidesya.com, 1 comodesinflamarlashemorroides.org, 1 comodo.nl, 1 +comodormirmasrapido.com, 1 comogene.com, 1 comopuededejardefumar.net, 1 comoquitarlasestriasrapidamente.com, 1 @@ -5536,6 +5993,7 @@ condesaelectronics.com, 1 condosforcash.com, 1 condroz-motors.be, 1 conectalmeria.com, 1 +conejovalleyelectrical.com, 1 confiancefoundation.org, 1 confidential.network, 1 config.schokokeks.org, 0 @@ -5558,6 +6016,7 @@ connect-ed.network, 1 connect.dating, 1 connectedcare.md, 1 connectingconcepts.com, 1 +connectmath.com, 1 connectmy.car, 1 connectum.eu, 1 connext.de, 1 @@ -5580,10 +6039,13 @@ consill.com, 1 console.ninja, 1 console.rest, 1 consonare.de, 1 +constancechen.me, 1 constant-rough.de, 1 +construct-trust.com, 1 constructionjobs.com, 1 constructive.men, 1 consul.io, 1 +consultpetkov.com, 1 consumer.gov, 1 consumeractionlawgroup.com, 1 consumerfiles.com, 1 @@ -5592,6 +6054,7 @@ consumidor.gov, 1 consuwijzer.nl, 1 content-api-dev.azurewebsites.net, 0 content-design.de, 1 +contentcoms.co.uk, 1 contentpass.net, 1 contessa32experience.com, 1 contextplatform.com, 1 @@ -5617,24 +6080,30 @@ converter.ml, 1 convexset.org, 1 convocatoriafundacionpepsicomexico.org, 0 cooker.fr, 1 +cookescastles.co.uk, 1 cookicons.co, 1 cookie4.com, 1 cookieandkate.com, 1 cookiecrook.com, 1 cookiesoft.de, 1 +cookiestudies.cf, 1 cookingbazart.com, 1 cookingcrusade.com, 1 cookinglife.nl, 0 cookingreporter.com, 1 cookmedical.com, 0 cooko.at, 1 +cool-parties.co.uk, 1 cool-wallpapers.jp, 1 cool110.tk, 1 cool110.xyz, 1 +coolattractions.co.uk, 1 coolbutbroken.com, 1 cooldan.com, 1 +coole-fete.de, 1 coolerssr.space, 1 coolgifs.de, 1 +coolkidsbouncycastles.co.uk, 1 coolviewthermostat.com, 1 coolvox.com, 1 coonelnel.net, 1 @@ -5642,6 +6111,7 @@ coopens.com, 1 coore.jp, 1 coorpacademy.com, 1 copperhead.co, 1 +copperheados.com, 1 coptic-treasures.com, 1 coptkm.cz, 1 copycrafter.net, 1 @@ -5654,6 +6124,7 @@ cordeydesign.ch, 1 cordlessdog.com, 1 core-concepts.de, 1 core-networks.de, 1 +core.org.pt, 1 coreapm.com, 1 coreapm.org, 1 corecdn.org, 1 @@ -5672,6 +6143,7 @@ coribi.com, 1 corinnanese.de, 1 corisu.co, 1 corksoncolumbus.com, 1 +corlija.com, 1 corlinde.nl, 1 corlitocaffe.de, 1 cornercircle.co.uk, 1 @@ -5695,10 +6167,10 @@ correiodovale.com.br, 1 corrupted.io, 1 corsa-b.uk, 1 cortexitrecruitment.com, 1 -cortisolsupplement.com, 1 corvus.eu.org, 1 coryadum.com, 1 -corzntin.fr, 1 +corytyburski.com, 1 +corzntin.fr, 0 cosirex.com, 1 cosmeticappraisal.com, 1 cosmeticasimple.com, 1 @@ -5717,6 +6189,7 @@ costa-rica-reisen.de, 1 costablancavoorjou.com, 1 costinstefan.eu, 1 costreportdata.com, 0 +costulessdirect.com, 1 coteries.com, 1 cotonea.de, 1 cotonmusic.ch, 1 @@ -5737,6 +6210,7 @@ countryoutlaws.ca, 1 countybankdel.com, 1 countyjailinmatesearch.com, 1 coup-dun-soir.ch, 1 +coupe-bordure.com, 1 couponcodesme.com, 1 cour4g3.me, 1 couragefound.org, 1 @@ -5747,6 +6221,7 @@ courses.nl, 1 courseworkbank.info, 1 courtlistener.com, 1 cousincouples.com, 1 +covbounce.co.uk, 1 cove.sh, 1 covenantoftheriver.org, 1 covermytrip.com.au, 1 @@ -5769,6 +6244,7 @@ cpcheats.co, 1 cphpvb.net, 1 cplusplus.se, 1 cppan.org, 1 +cppressinc.com, 1 cpqcol.gov.co, 1 cprnearme.com, 1 cptoon.com, 1 @@ -5808,6 +6284,8 @@ crashsec.com, 1 crawcial.de, 1 crawfordcountytcc.org, 1 crawl.report, 1 +crawleybouncycastles.co.uk, 1 +crazycastles.ie, 1 crazydomains.ae, 1 crazydomains.co.nz, 1 crazydomains.co.uk, 1 @@ -5824,8 +6302,11 @@ crea-shops.ch, 1 crea.bg, 1 crea.me, 1 creadstudy.com, 1 +creamcastles.co.uk, 1 create-ls.jp, 1 +create-together.nl, 1 createursdefilms.com, 1 +creation-contemporaine.com, 1 creations-edita.com, 1 creative-coder.de, 1 creative-wave.fr, 1 @@ -5843,8 +6324,10 @@ creativelaw.eu, 1 creativeliquid.com, 1 creativesurvey.com, 1 creativeweb.biz, 1 +creativlabor.ch, 1 creators-design.com, 1 creators.co, 1 +creators.direct, 1 credential.eu, 1 credex.bg, 1 crediteo.pl, 1 @@ -5908,8 +6391,12 @@ crow.tw, 1 crowdbox.net, 1 crowdcloud.be, 1 crowdsupply.com, 1 +crownbouncycastlehire.co.uk, 1 +crowncastles.co.uk, 1 +crownmarqueehire.co.uk, 1 crox.co, 1 croydonapartments.com.au, 1 +croydonbouncycastles.co.uk, 1 crrev.com, 1 crstat.ru, 1 crt.sh, 1 @@ -5972,6 +6459,7 @@ cshopify.com, 1 csilies.de, 1 csinfo.us, 1 csinterstargeneve.ch, 1 +cskentertainment.co.uk, 1 csmainframe.com, 1 csokolade.hu, 1 csp.ch, 1 @@ -5997,6 +6485,7 @@ ctpe.net, 1 ctrld.me, 1 ctyi.me, 1 cuanhua3s.com, 1 +cub-bouncingcastles.co.uk, 1 cube-cloud.com, 1 cube.de, 1 cubecraft.net, 1 @@ -6049,6 +6538,7 @@ curiouscat.me, 1 curlybracket.co.uk, 1 currency-strength.com, 1 current.com, 1 +currentlystreaming.com, 1 currentobserver.com, 1 currynissanmaparts.com, 1 cursos.com, 1 @@ -6069,6 +6559,7 @@ customerbox.ir, 1 customfilmworks.com, 1 customfitmarketing.com, 1 customgear.com.au, 1 +customizeyoursink.com, 1 customromlist.com, 1 customshort.link, 1 customwritings.com, 1 @@ -6168,6 +6659,7 @@ cypressinheritancesaga.com, 1 cypresslegacy.com, 1 cyprus-company-service.com, 1 cysec.biz, 1 +cytegic-update-packages.com, 1 cyumus.com, 1 czakey.net, 1 czechamlp.com, 1 @@ -6209,6 +6701,7 @@ dado.fr, 1 dado.me, 1 dado.virtual.museum, 1 dadons-laserdiscs.com, 1 +dadosch.de, 1 dadrian.io, 1 daduke.org, 1 daemen.org, 1 @@ -6228,6 +6721,7 @@ dailykos.com, 1 dailytopix.com, 1 daintymeal.com, 1 dairyshrine.org, 1 +daisidaniels.co.uk, 1 daiwai.de, 0 daiweihu.com, 1 daiyuu.jp, 1 @@ -6264,6 +6758,7 @@ danamica.dk, 1 danandrum.com, 1 danarozmarin.com, 1 danchen.org, 1 +dancingcubs.co.uk, 1 dandenongroadapartments.com.au, 1 dandymrsb.com, 1 dango.in, 1 @@ -6301,6 +6796,7 @@ dankim.de, 0 dankredues.com, 1 danla.nl, 1 danmaby.com, 1 +danmarksbedstefredagsbar.dk, 1 danminkevitch.com, 1 danny.fm, 1 dannyrohde.de, 1 @@ -6428,7 +6924,9 @@ datingticino.ch, 1 datorb.com, 1 datovyaudit.cz, 1 datsound.ru, 1 +datsumou-q.com, 1 datumou-osusume.com, 1 +datumou-recipe.com, 1 daubehosting.de, 1 dave-pearce.com, 1 daveaglick.com, 1 @@ -6449,6 +6947,7 @@ david.kitchen, 1 davidadrian.org, 1 davidandersson.se, 1 davidcrx.net, 1 +davidfrancoeur.com, 1 davidgouveia.net, 1 davidgow.net, 1 davidgreig.uk, 1 @@ -6491,7 +6990,9 @@ dbaron.org, 1 dbas.cz, 1 dbcom.ru, 1 dbdc.us, 1 +dbentertainment.co.uk, 1 dbgamestudio.com, 1 +dblcastles.co.uk, 1 dbldub.net, 1 dblx.io, 1 dbmteam.com, 1 @@ -6506,6 +7007,7 @@ dc-occasies.be, 1 dc562.org, 1 dc585.info, 1 dcautomacao.com.br, 1 +dcbouncycastles.co.uk, 1 dcc.cat, 1 dcc.moe, 1 dccoffeeproducts.com, 1 @@ -6520,8 +7022,6 @@ dcrdev.com, 1 dctxf.com, 1 dd.art.pl, 1 ddel.de, 1 -dden.ca, 0 -dden.xyz, 1 ddepot.us, 1 ddfreedish.site, 0 ddhosted.com, 1 @@ -6530,6 +7030,7 @@ ddns-anbieter.de, 1 ddocu.me, 1 ddos-mitigation.co.uk, 1 ddos-mitigation.info, 1 +ddracepro.net, 1 dds.mil, 1 de-gucci.com, 1 de-mail.info, 1 @@ -6556,19 +7057,24 @@ dealbanana.fr, 1 dealbanana.it, 1 dealbanana.se, 1 dealcruiser.nl, 1 +dealinflatables.co.uk, 1 dealpass.no, 1 deamuseum.org, 1 deanbank.com, 1 deanjerkovich.com, 1 deanmorgan.org, 1 +deano-s.co.uk, 1 deanosplace.net, 1 deanpearce.net, 1 dearfcc.com, 1 dearfcc.net, 1 dearfcc.org, 1 +dearnevalleybouncycastles.co.uk, 1 deathy.ro, 1 debie-usedcars.be, 1 debigare.com, 1 +debitoutil.com, 1 +debitpaie.com, 1 deborahmarinelli.eu, 1 debron-ot.nl, 1 debrusoft.ch, 1 @@ -6605,6 +7111,7 @@ dedmorozrzn.ru, 1 deduijventil.nl, 1 dee.pe, 1 dee.su, 1 +deegeeinflatables.co.uk, 1 deep.club, 1 deeparamaraj.com, 1 deepbluecrafting.co.uk, 1 @@ -6664,7 +7171,6 @@ dejw.cz, 1 dekasiba.com, 1 delahrzolder.nl, 1 delbecqvo.be, 1 -delbrouck.ch, 1 deleidscheflesch.nl, 1 delfic.org, 1 delhionlinegifts.com, 1 @@ -6735,6 +7241,7 @@ dentystabirmingham.co.uk, 1 deontology.com, 1 depaddestoeltjes.be, 1 depechemode-live.com, 1 +depedshs.com, 1 depicus.com, 1 depone.net, 1 depotsquarekerrville.com, 1 @@ -6747,12 +7254,17 @@ der-bank-blog.de, 1 der-gardinenmann.de, 1 der-rudi.eu, 1 der-stein-fluesterer.de, 1 +derbybouncycastles.com, 1 derbyshire-language-scheme.co.uk, 1 derchris.me, 1 +derdewereldrommelmarkt.nl, 1 derechosdigitales.org, 1 dereferenced.net, 1 deregowski.net, 1 +derehamcastles.co.uk, 1 derekkent.com, 1 +derekseaman.com, 1 +derekseaman.studio, 1 dergeilstestammderwelt.de, 1 derhil.de, 1 derivativeshub.pro, 1 @@ -6804,6 +7316,7 @@ destinattorneyjohngreene.com, 1 desu.ne.jp, 1 det-te.ch, 1 detalhecomercio.com.br, 1 +detalyedesigngroup.com, 1 detechnologiecooperatie.nl, 1 detecte-fuite.ch, 1 detecte.ch, 1 @@ -6814,6 +7327,7 @@ dethikiemtra.com, 1 detoxsinutritie.ro, 1 detroit-english.de, 1 detroitstylepizza.com, 1 +detroitzoo.org, 1 detskysad.com, 1 detteflies.com, 1 detype.nl, 1 @@ -6827,6 +7341,7 @@ deux.solutions, 1 deuxsol.co, 1 deuxsol.com, 1 deuxsolutions.com, 1 +dev-brandywineglobal.com, 1 dev-pulse-mtn.pantheonsite.io, 1 dev-talk.eu, 1 dev-talk.net, 1 @@ -6895,6 +7410,7 @@ dflcares.com, 1 dfmn.berlin, 1 dfnet.ml, 0 dfranke.com, 1 +dgbouncycastlehire.com, 1 dgby.org, 1 dgeex.eu, 1 dgitup.com, 1 @@ -6908,6 +7424,7 @@ dhconcept.ch, 1 dheart.net, 1 dhedegaard.dk, 1 dhhs.gov, 1 +dhinflatables.co.uk, 1 dhl-smart.ch, 1 dhlinux.org, 1 dhome.at, 1 @@ -6957,6 +7474,7 @@ didacte.com, 1 didche.net, 1 diddens.de, 1 didierlaumen.be, 1 +didikhari.web.id, 1 die-besten-weisheiten.de, 1 die-blahuts.de, 1 die-borts.ch, 1 @@ -6995,6 +7513,7 @@ digdata.de, 1 diggable.co, 1 dighans.com, 1 digiarc.net, 1 +digibild.ch, 1 digibull.link, 1 digicert-support.com, 1 digicert.nl, 1 @@ -7034,6 +7553,7 @@ digitalimpostor.co.uk, 1 digitallocker.com, 0 digitalrights.center, 1 digitalrights.fund, 1 +digitalsurge.io, 1 digitaltechnologies.ltd.uk, 1 digitalunite.de, 1 digitkon.com, 1 @@ -7072,6 +7592,7 @@ dinge.xyz, 1 dingss.com, 1 dinmtb.dk, 1 dino.li, 1 +dinotopia.org.uk, 1 dinotv.at, 1 dintillat.fr, 1 dintrafic.net, 1 @@ -7099,6 +7620,7 @@ dirips.com, 1 dirk-scheele.de, 1 dirko.net, 1 dirkwolf.de, 1 +dirtcraft.ca, 1 dirtycat.ru, 1 disability.gov, 1 disabled.dating, 1 @@ -7106,6 +7628,7 @@ disadattamentolavorativo.it, 1 disanteimpianti.com, 1 disavow.tools, 1 disc.uz, 1 +discarica.roma.it, 1 discha.net, 1 disciples.io, 1 discipul.nl, 1 @@ -7129,11 +7652,17 @@ discoveryballoon.org, 1 discoveryrom.org, 1 discreet-condooms.nl, 1 disinclined.org, 1 +disinfestatori.com, 1 +disinfestazione.venezia.it, 1 +disinfestazione24.it, 1 +disinfestazioni-umbria.it, 1 +disinfestazioni.info, 1 disinfestazioni.net, 1 disinisharing.com, 1 diskbit.com, 1 dismail.de, 1 disposable.link, 1 +disroot.org, 1 disrupters.ch, 1 dissectcyber.com, 1 dissertationhelp.com, 1 @@ -7170,25 +7699,33 @@ diycc.org, 1 diymediahome.org, 1 diyosun.com, 1 diz.in.ua, 1 +dizzythewizard.co.uk, 1 dj-x.info, 1 +dj3dub.com, 1 djangobirthday.com, 1 djangogolf.com, 1 djangoproject.com, 1 djangosnippets.org, 1 +djbbouncycastles.co.uk, 1 djc.me, 1 +djdavid98.hu, 1 djieno.com, 1 djipanov.com, 1 djlive.pl, 1 djlnetworks.co.uk, 1 +djsbouncycastlehire.com, 1 djt-vom-chausseehaus.de, 1 djul.net, 1 +djwaynepryke.com, 1 dk.search.yahoo.com, 0 dkcomputers.com.au, 1 dkds.us, 1 dkn.go.id, 1 dkravchenko.su, 0 dl.google.com, 1 +dlabouncycastlehire.co.uk, 1 dlaspania.pl, 1 +dlbouncers.co.uk, 1 dlde.ru, 1 dldl.fr, 1 dlfsymposium.nl, 1 @@ -7196,6 +7733,7 @@ dlg.im, 1 dlitz.net, 1 dlld.com, 1 dlouwrink.nl, 1 +dlunch.net, 1 dlyl888.com, 1 dlzz.net, 1 dm.lookout.com, 0 @@ -7203,6 +7741,7 @@ dm4productions.com, 1 dm7ds.de, 1 dmarc.dk, 1 dmarketer.com, 1 +dmcastles.com, 1 dmdre.com, 1 dmeevalumate.com, 1 dmenergy.ru, 1 @@ -7257,6 +7796,7 @@ docplexus.in, 1 docs.google.com, 0 docs.python.org, 1 docs.re, 1 +docsoc.org.uk, 1 doctor-locks.co.uk, 1 doctor.dating, 1 doctorfox.co.uk, 1 @@ -7391,6 +7931,7 @@ dormebebe.com.br, 1 dormiu.com, 1 dormiu.com.br, 1 dorquelle.com, 1 +dorsetentertainments.co.uk, 1 dosenkiwi.at, 1 dosipe.com, 1 doska.by, 1 @@ -7399,6 +7940,7 @@ doska.ru, 1 dosomeworks.biz, 1 dossplumbing.co.za, 1 dostavkakurierom.ru, 1 +dosvientoselectrical.com, 1 dosyauzantisi.com, 1 dot.ro, 1 dotacni-parazit.cz, 1 @@ -7445,6 +7987,7 @@ doyoutax.com, 1 doze-cloud.tech, 1 dpd.com.pl, 1 dperson.net, 1 +dpfsolutionsfl.com, 1 dpg.no, 1 dprb.biz, 1 dprd-wonogirikab.go.id, 0 @@ -7478,6 +8021,7 @@ drainagebuizen.nl, 0 drakeluce.com, 1 drakenprospero.com, 0 drakfot.se, 1 +dralexjimenez.com, 1 dramaticpeople.com, 1 dranderle.com, 1 dranek.com, 1 @@ -7498,6 +8042,8 @@ dreaming.solutions, 1 dreamithost.com.au, 1 dreamlandmagic.com, 1 dreamlinehost.com, 0 +dreamlux.cz, 1 +dreamlux.sk, 1 dreamonkey.com, 1 dreamtechie.com, 1 dredgepress.com, 1 @@ -7511,6 +8057,7 @@ drew.beer, 1 drew.red, 1 dreweryinc.com, 1 drewsilcock.co.uk, 1 +drezzy.it, 1 drfrey.ch, 1 drgn.no, 1 drheibel.com, 1 @@ -7518,9 +8065,11 @@ driesjtuver.nl, 1 driftdude.nl, 1 drighes.com, 1 drillion.net, 1 +drillnation.com.au, 1 drinkplanet.eu, 1 drino.org, 0 drive.google.com, 0 +drive.xyz, 1 driven2shine.eu, 1 drivenes.net, 1 driver.ru, 1 @@ -7536,7 +8085,9 @@ drixn.cn, 1 drixn.com, 1 drixn.info, 1 drixn.net, 1 +drizz.com.br, 1 drjacquesmalan.com, 1 +drjenafernandez.com, 1 drjoe.ca, 1 drjuanitacollier.com, 1 drkhsh.at, 1 @@ -7597,6 +8148,7 @@ dsm5.com, 1 dsol.hu, 1 dssale.com, 1 dt27.org, 1 +dtbouncycastles.co.uk, 1 dtdsh.com, 1 dtechstore.com.br, 1 dtg-fonds.com, 1 @@ -7605,6 +8157,7 @@ dtg-fonds.net, 1 dtk-vom-chausseehaus.de, 1 dtnx.net, 1 dtp-mstdn.jp, 1 +dtuaarsfest.dk, 1 dtx.sk, 1 dualascent.com, 1 dubaieveningsafari.com, 1 @@ -7618,6 +8171,7 @@ duckasylum.com, 1 duckbase.com, 1 duckduckstart.com, 1 duckinc.net, 1 +duckyubuntu.tk, 1 ducohosting.com, 1 duelsow.eu, 1 duernberg.at, 1 @@ -7647,6 +8201,7 @@ dumino.bg, 1 dunableguitars.com, 0 dunashoes.com, 1 duncancmt.com, 1 +duncanfamilytrust.org, 1 duncanwinfrey.com, 1 dundalkdonnie.com, 1 dune.io, 1 @@ -7683,6 +8238,7 @@ dv189.com, 1 dvbris.co.uk, 1 dvbris.com, 1 dvdland.com.au, 1 +dvhosting.be, 1 dvnatura.ch, 1 dvorupotocnych.sk, 1 dvotx.org, 1 @@ -7762,6 +8318,7 @@ e2feed.com, 1 e30.ee, 1 e3kids.com, 1 e3q.de, 1 +e505.net, 1 e5tv.hu, 1 e64.com, 1 e7d.io, 1 @@ -7788,6 +8345,9 @@ eashwar.com, 1 eason-yang.com, 1 east-line.su, 1 eastarm.net, 1 +eastcoastbubbleandbounce.co.uk, 1 +eastcoastinflatables.co.uk, 1 +eastlothianbouncycastles.co.uk, 1 eastmanbusinessinstitute.com, 1 eastmontgroup.com, 1 easy-factures.fr, 1 @@ -7806,7 +8366,7 @@ easyproperty.com, 1 easypv.ch, 1 easysimplecrm.com, 0 easystore.co, 1 -eat-sleep-code.com, 0 +eat-sleep-code.com, 1 eat-the-world.ch, 1 eatery.co.il, 1 eatfitoutlet.com.br, 1 @@ -7939,6 +8499,7 @@ educationunlimited.com, 1 educator-one.com, 1 educators.co.nz, 1 educatoys.com.br, 1 +educatweb.de, 1 eductf.org, 1 edudrugs.com, 1 eduid.se, 1 @@ -7981,11 +8542,13 @@ effdocs.com, 1 effe.ch, 1 effective-altruist.com, 1 effectivecoffee.com, 1 +effectiveosgi.com, 1 effectivepapers.com, 1 effex.ru, 1 effishiency.com, 1 effizienta.ch, 1 efflam.net, 1 +eft.boutique, 1 eftcorp.biz, 1 egablo.black, 1 egami.ch, 1 @@ -8054,6 +8617,7 @@ ejdv-anmeldung.de, 1 ejeff.org, 1 ejgconsultancy.co.uk, 1 ejusu.com, 1 +ekaigotenshoku.com, 1 ekd.de, 1 ekedc.com, 1 ekedp.com, 1 @@ -8072,6 +8636,7 @@ elaon.de, 1 elars.de, 1 elaxy-online.de, 1 elbetech.net, 1 +elderoost.com, 1 eldertons.co.uk, 1 eldinhadzic.com, 1 eldrid.ge, 1 @@ -8083,6 +8648,7 @@ electragirl.com, 1 electricalcontrolpanels.co.uk, 1 electricgatemotorgermiston.co.za, 1 electronic-ignition-system.com, 1 +electronicafacil.net, 1 electronicfasteners.com, 1 eled.io, 1 elefantevoador.com, 1 @@ -8149,6 +8715,7 @@ elistor6100.xyz, 1 elite-box.com, 1 elite-box.org, 1 elite12.de, 1 +elitebouncingfun.com, 1 elitegameservers.net, 1 elitehosting.de, 1 elixir.bzh, 1 @@ -8162,13 +8729,17 @@ ellegaard.dk, 1 ellemental.me, 1 ellen-skye.de, 0 ellevit.ch, 1 +elliesbouncers.co.uk, 1 elliff.net, 1 elliot.cat, 1 elliotgluck.com, 1 elliquiy.com, 1 elliriehl.at, 1 +ellisamusements.co.uk, 1 +ellisleisure.co.uk, 1 ellsinger.me, 1 elmermx.ch, 1 +elna-service.com.ua, 1 elnan.do, 1 elodieclerc.ch, 1 eloge.se, 1 @@ -8185,6 +8756,7 @@ elsword.moe, 0 eltagroup.co.uk, 1 eltair.com, 1 eltern-verein.ch, 1 +elternbeiratswahl.online, 1 elternforum-birmensdorf.ch, 1 elternverein-utzenstorf.ch, 1 eltransportquevolem.org, 1 @@ -8245,6 +8817,7 @@ emojiengine.com, 1 emolafarm.com, 1 emond-usedcars.net, 1 emoticonesjaponeses.com, 1 +emotuit.com, 1 empathogen.com, 1 empathogens.com, 1 empathy.ca, 1 @@ -8295,6 +8868,7 @@ endlessvideo.com, 1 endofnet.org, 1 endoftennancycleaning.co.uk, 1 endohaus.us, 1 +endspamwith.us, 1 enduranceday.be, 1 endzeit-architekten.com, 0 enemiesoflight.de, 1 @@ -8399,10 +8973,13 @@ epaygateway.net, 1 epi.one, 1 epic-vistas.com, 1 epic-vistas.de, 1 +epicbouncycastlehirenorwich.co.uk, 1 +epicbouncycastles.co.uk, 1 epicenter.work, 1 epicenter.works, 1 epicentre.works, 1 epichouse.net, 1 +epicinflatables.co.uk, 1 epickitty.co.uk, 1 epicsecure.de, 1 epicsoft.de, 1 @@ -8416,11 +8993,12 @@ epistas.de, 1 epizentrum.work, 1 epizentrum.works, 1 epmcentroitalia.it, 1 -epoch.com, 1 +epoch.com, 0 epolitiker.com, 1 epos-distributor.co.uk, 1 eposbirmingham.co.uk, 1 eposbrighton.co.uk, 1 +eposbristol.co.uk, 1 eposcardiff.co.uk, 1 eposcloud.net, 1 eposkent.co.uk, 1 @@ -8445,6 +9023,7 @@ eprofitacademy.com, 1 epsilon.dk, 1 epsorting.cz, 1 epublibre.org, 1 +epulsar.ru, 1 eq-serve.com, 1 eqib.nl, 1 eqorg.com, 1 @@ -8492,6 +9071,7 @@ eriner.me, 1 erinn.io, 1 eriser.fr, 1 erisrenee.com, 1 +erkaelderbarenaaben.dk, 1 ernaehrungsberatung-rapperswil.ch, 1 ernest.ly, 1 eron.info, 1 @@ -8574,6 +9154,7 @@ esp-berlin.de, 1 esp.community, 1 espace-caen.fr, 1 espace-gestion.fr, 1 +espace.network, 1 espacetemps.ch, 1 espacetheosophie.fr, 1 espacio-cultural.com, 1 @@ -8650,6 +9231,7 @@ etherpad.nl, 1 ethicaldata.co.uk, 1 ethicaltek.com, 1 ethicsburg.gov, 1 +ethika.com, 1 ethiobaba.com, 1 ethiopian.dating, 1 ethitter.com, 1 @@ -8657,6 +9239,7 @@ ethosinfo.com, 1 etidni.help, 1 etienne.cc, 1 etincelle.ml, 1 +etiquetaunica.com.br, 1 etkaddict.com, 1 etoile-usedcars.com, 1 etre-soi.ch, 1 @@ -8745,10 +9328,12 @@ evecalm.com, 1 evegalaxy.net, 1 evelienzorgt.nl, 1 evelyndayman.com, 1 +event4fun.no, 1 eventaro.com, 1 eventive.org, 1 eventmake.es, 1 eventosenmendoza.com.ar, 1 +events-hire.co.uk, 1 eventsafrica.net, 1 ever.sale, 1 everain.me, 1 @@ -8787,6 +9372,7 @@ evodation.com, 1 evodation.org, 1 evok.com.co, 0 evolutionexpeditions.com, 1 +evolutioninflatables.co.uk, 1 evolutionlending.co.uk, 1 evolutionpets.com, 1 evonews.com, 1 @@ -8803,6 +9389,7 @@ ewanm89.com, 1 ewanm89.uk, 1 ewe2.ninja, 1 ewie.name, 1 +ewizmo.com, 1 eworksmedia.com, 1 ewout.io, 1 ewsfeed.com, 1 @@ -8822,8 +9409,10 @@ excentos.com, 1 excessamerica.com, 1 exchangecoordinator.com, 1 exchangeworks.co, 1 +exclusivebouncycastles.co.uk, 1 exdamo.de, 1 exe-boss.tech, 1 +exebouncycastles.co.uk, 1 exehack.net, 1 exeintel.com, 1 exekutori.com, 1 @@ -8880,6 +9469,7 @@ expresswins.co.uk, 1 expxkcd.com, 1 exs.lv, 1 exside.com, 1 +extasic.com, 1 extendwings.com, 1 extensiblewebmanifesto.org, 1 extensiblewebreportcard.org, 1 @@ -8911,6 +9501,7 @@ eynio.com, 1 eyps.net, 1 eytosh.net, 1 eyyit.com, 0 +ez3d.eu, 1 ezakazivanje.rs, 1 ezdog.press, 1 ezequiel-garzon.net, 1 @@ -8938,6 +9529,8 @@ f8842.com, 1 fa-works.com, 1 faber.org.ru, 1 faberusa.com, 1 +fabian-fingerle.de, 1 +fabian-kluge.de, 1 fabian-koeppen.de, 1 fabianackle.ch, 1 fabianasantiago.com, 1 @@ -8961,12 +9554,14 @@ facebook-atom.appspot.com, 1 facebook.ax, 1 facebook.com, 0 facebooktsukaikata.net, 1 +facebylouise.co.uk, 1 facepalmsecurity.com, 1 facepunch.org, 1 facerepo.com, 1 facesnf.com, 1 fach-journalist.de, 1 fachschaft-informatik.de, 1 +fachschaftslisten.at, 1 fachschaftslisten.org, 1 facialexercising.com, 1 faciledireto.com.br, 1 @@ -8995,6 +9590,7 @@ failover.eu, 1 fairbill.com, 1 faircom.co.za, 1 fairedeseconomies.info, 1 +fairplay.im, 1 fairviewmotel-simcoe.com, 1 faithgrowth.com, 1 faithmissionaries.com, 1 @@ -9007,6 +9603,7 @@ fakti.bg, 1 fakturi.com, 1 fakturoid.cz, 1 falaowang.com, 1 +falbros.com, 1 falconvintners.com, 1 faldoria.de, 1 falkus.net, 1 @@ -9035,6 +9632,7 @@ familieholme.de, 1 familjenfrodlund.se, 1 familjenm.se, 1 familletouret.fr, 1 +familyparties.co.uk, 1 familyreal.ru, 1 famososnaweb.com, 1 famousbirthdays.com, 1 @@ -9043,6 +9641,7 @@ famvangelder.nl, 1 famvsomeren.nl, 1 fanboi.ch, 1 fancy-bridge.com, 1 +fander.it, 1 fandler.cz, 1 fandomservices.com, 1 fanfareunion.ch, 1 @@ -9054,7 +9653,9 @@ fantasticcleaners.com.au, 1 fantasticgardenersmelbourne.com.au, 1 fantastichandymanmelbourne.com.au, 1 fantasticpestcontrolmelbourne.com.au, 1 +fantasycastles.co.uk, 1 fantasyescortsbirmingham.co.uk, 1 +fantasypartyhire.com.au, 1 fantasyspectrum.com, 1 fantopia.club, 1 fanvoice.com, 1 @@ -9119,6 +9720,7 @@ fastconfirm.com, 1 fastforwardthemes.com, 1 fastmail.com, 0 fastonline.ro, 1 +fastpresence.com, 1 fastrevision.com, 1 fastwebsites.com.br, 1 faszienrollen-info.de, 0 @@ -9137,10 +9739,13 @@ fawkex.me, 1 fawong.com, 1 faxite.com, 1 faxreader.net, 1 +fb.me, 1 +fbcdn.net, 1 fbcfairburn.com, 1 fbcopy.com, 1 fbi.pw, 1 fbijobs.gov, 1 +fbsbx.com, 1 fc.media, 1 fca-tools.com, 1 fcapartsdb.com, 1 @@ -9149,6 +9754,7 @@ fcforum.net, 1 fcitasc.com, 1 fckd.net, 1 fcprovadia.com, 1 +fdevs.ch, 1 fdlibre.eu, 1 fdsys.gov, 0 feac.us, 1 @@ -9206,6 +9812,7 @@ felistirnavia.sk, 1 felixbarta.de, 1 felixhefner.de, 1 felixkauer.de, 1 +felixqu.com, 1 felixsanz.com, 1 felixseele.de, 1 felsing.net, 1 @@ -9216,6 +9823,7 @@ femradio.es, 1 femtomind.com, 1 fence-stlouis.com, 1 feng.si, 1 +fengyadi.com, 1 fengyi.tel, 1 fenster-bank.at, 1 fenster-bank.de, 1 @@ -9224,6 +9832,7 @@ feras-alhajjaji.com, 1 ferdies.co.za, 1 fergusoncastle.com, 1 ferien-netzwerk.de, 1 +ferienchalet-wallis.ch, 1 ferienhaus-polchow-ruegen.de, 0 ferienwohnungen-lastminute.de, 1 fermabel.com.br, 1 @@ -9362,6 +9971,7 @@ finelovedolls.com, 1 finenet.com.tw, 1 finer04.pw, 1 finewineonline.com, 1 +finfev.de, 1 finform.ch, 1 fini-de-jouer.ch, 1 finisron.in, 1 @@ -9404,8 +10014,11 @@ first-house.no, 1 first-time-offender.com, 1 first.org, 1 first4it.com, 1 +firstchoicebouncycastlehire.co.uk, 1 firstchoicecandy.com, 1 firstchoicepool.com, 1 +firstclasscastles.com, 1 +firstclassleisure.co.uk, 1 firstderm.com, 1 firstfinca.de, 1 firstmall.de, 1 @@ -9439,6 +10052,7 @@ fix-the-timeline.com, 1 fix-the-timeline.org, 1 fixate.ru, 1 fixatom.com, 1 +fixeaide.com, 1 fixel.express, 1 fixforce.nl, 1 fixhotsauce.com, 1 @@ -9452,6 +10066,7 @@ fizz.buzz, 0 fj.search.yahoo.com, 0 fj.simple.com, 0 fjharcu.com, 1 +fjugstad.com, 1 fkcdn.de, 1 fkfev.de, 1 fl0000.com, 1 @@ -9489,6 +10104,7 @@ flavr.be, 1 flawlesscowboy.xyz, 1 flc111.com, 1 flc999.com, 1 +fleamarketgoods.com, 1 fleep.io, 1 fleetssl.com, 1 flehm.de, 1 @@ -9543,6 +10159,7 @@ floriantanner.ch, 1 florida-prep.org, 1 floridaderi.ru, 1 floridafieros.org, 1 +floridahomesinvest.com, 1 florinapp.com, 1 florinlungu.it, 1 florismoo.nl, 1 @@ -9558,6 +10175,7 @@ flow.su, 1 flowerandplant.org, 1 flowreader.com, 1 flox.io, 1 +floydm.com, 1 flra.gov, 1 flucky.xyz, 1 flucto.com, 1 @@ -9585,6 +10203,7 @@ flyingpackets.net, 1 flyingrub.me, 1 flymns.fr, 1 flynn.io, 1 +flyp.me, 1 flyserver.co.il, 1 flyspace.ga, 1 flyspace.ml, 1 @@ -9596,6 +10215,7 @@ fm-cdn.de, 1 fm.ie, 1 fmapplication.com, 1 fmarchal.fr, 1 +fmdance.cl, 1 fminsight.net, 1 fmodoux.biz, 1 fmovies.fyi, 1 @@ -9615,6 +10235,7 @@ focusministries1.org, 1 foej-aktiv.de, 1 foej.net, 1 foerster-kunststoff.de, 1 +fognini-depablo.eu, 1 foia.gov, 1 fokan.be, 1 fokan.ch, 1 @@ -9686,7 +10307,9 @@ forextimes.ru, 0 forge-goerger.eu, 1 forglemmigej.net, 1 forgotten-legends.org, 1 +formaliteo.com, 1 forman.store, 1 +formapi.io, 1 format-paysage.ch, 1 formation-assureur.com, 1 formation-mac.ch, 1 @@ -9727,6 +10350,7 @@ forum-bonn.de, 1 forum-kinozal-tv.appspot.com, 1 forum-kinozal.appspot.com, 1 forum.linode.com, 0 +forum3.ru, 1 forumvoordemocratie.nl, 1 forvisualdesign.com, 1 forward-fly-fishing.ch, 1 @@ -9766,6 +10390,7 @@ fougner.co, 1 found.website, 1 foundsounds.me, 1 fourdesignstudio.com, 1 +fowlervwparts.com, 1 foxbnc.co.uk, 1 foxdev.co, 1 foxes.no, 1 @@ -9791,6 +10416,7 @@ fragstore.net, 1 fraho.eu, 1 framapiaf.org, 1 fran.cr, 1 +francesca-and-lucas.com, 1 francescopalazzo.com, 1 franchini.email, 1 franchini.engineer, 1 @@ -9833,6 +10459,7 @@ frdl.ch, 1 freaksites.dk, 1 frebi.org, 1 frebib.net, 1 +freddysfuncastles.co.uk, 1 freddythechick.uk, 1 frederik-braun.com, 1 frederikschoell.de, 0 @@ -9859,7 +10486,9 @@ freecloud.at, 1 freedev.cz, 1 freedom.press, 1 freedomflotilla.org, 1 +freedomfrontier.tk, 1 freedomkiaparts.com, 1 +freedomonline.bg, 1 freedomrealtyoftexas.com, 1 freedomvote.nl, 1 freeexampapers.com, 1 @@ -9870,6 +10499,7 @@ freegutters.com, 1 freeinoutboard.com, 1 freejasongoudlock.org, 1 freejeremy.net, 1 +freejidi.com, 1 freekdevries.nl, 1 freela.ch, 1 freelance.boutique, 1 @@ -10005,6 +10635,7 @@ fsky.info, 1 fsm2016.org, 1 fsps.ch, 1 fsradio.eu, 1 +fstatic.io, 1 fsvt.ch, 1 ftang.de, 1 ftc.gov, 0 @@ -10029,6 +10660,7 @@ fuite.ch, 1 fuitedeau.ch, 1 fuites.ch, 1 fujianshipbuilding.com, 1 +fujiwaraqol.com, 1 fukakukeiba.com, 1 fukuko.biz, 1 fukuko.xyz, 1 @@ -10043,21 +10675,32 @@ fullautomotivo.com.br, 1 fullbundle.com, 1 fullhub.ru, 1 fullmatch.net, 1 +fullstacknotes.com, 1 fumblers.ca, 1 fumerolles.ch, 1 +fun-bounce.co.uk, 1 +fun-tasia.co.uk, 1 +fun4kidzbouncycastles.co.uk, 1 +fun4ubouncycastles.co.uk, 1 +funandbounce.com, 1 funatic.nl, 1 +funbouncelincs.co.uk, 1 funchestra.at, 0 functional.cc, 1 functions-online.com, 1 fundacionfranciscofiasco.org, 1 +fundayltd.com, 1 fundays.nl, 1 fundchan.com, 1 fundeego.com, 1 funderburg.me, 1 fundingempire.com, 1 fundort.ch, 1 +funfactorleeds.co.uk, 1 +funfoodco.co.uk, 1 funfunmstdn.tokyo, 1 fungame.eu, 0 +funhouse-inflatables.co.uk, 1 funi4u.com, 1 funideas.org, 1 funken-networks.de, 1 @@ -10070,8 +10713,16 @@ funny-joke-pictures.com, 1 funnybikini.com, 1 funoverip.net, 1 funspins.com, 1 +funtastic-event-hire.co.uk, 1 +funtastic.ie, 1 +funtasticinflatablesdurham.co.uk, 1 +funtime-inflatables.co.uk, 1 funtime.kiev.ua, 0 +funtimebourne.co.uk, 1 +funtimeentertainment.co.uk, 1 +funtimesbouncycastles.co.uk, 1 furgo.love, 1 +furigana.info, 1 furkancaliskan.com, 1 furkot.com, 1 furkot.de, 1 @@ -10107,6 +10758,7 @@ fuwafuwa.moe, 1 fuxwerk.de, 1 fuyu.moe, 1 fuzoku-sodan.com, 1 +fuzoku.jp, 1 fuzzing-project.org, 1 fveevaete.com, 1 fwei.tk, 1 @@ -10172,6 +10824,7 @@ gagygnole.ch, 1 gaichanh.com, 1 gaichon.com, 1 gaines-sodiamex.fr, 1 +gaio-automobiles.fr, 1 gaireg.de, 1 gaiserik.com, 1 gajas18.com, 1 @@ -10228,6 +10881,7 @@ gamercredo.com, 1 gamercredo.net, 1 gamerpoets.com, 1 games4theworld.org, 1 +gameshowchallenge.ie, 1 gamesplanet.com, 1 gamestats.gg, 1 gameswitchers.uk, 1 @@ -10258,8 +10912,10 @@ garagevanhulle-used.be, 1 garanteasy.com, 1 garantieabschluss.de, 0 garbage-juice.com, 1 +garciniacambogiareviewed.co, 1 garda-see.mobi, 1 garden-life.org, 1 +gardengameshireuk.com, 1 garderobche.eu, 1 gardikagigih.com, 1 garedtech.com, 0 @@ -10322,12 +10978,11 @@ gdoce.es, 1 gdutnic.com, 1 gdv.me, 1 gdz-otvety.com, 1 -gdz-spishy.com, 1 -gdz.tv, 1 ge1.me, 0 ge3k.net, 0 gear-acquisition-syndrome.community, 1 gearev.net, 1 +gearfinder.nl, 1 gearset.com, 1 geaskb.nl, 1 geass.xyz, 1 @@ -10362,6 +11017,7 @@ geekwithabudget.com, 1 geekwu.org, 1 geekzone.co.nz, 1 geekzone.fr, 1 +geerdsen.net, 1 geertdegraaf.nl, 1 geertswei.nl, 1 gegeco.ch, 1 @@ -10424,6 +11080,7 @@ genneve.com, 1 genomequestlive.com, 1 genoog.com, 1 genosse-einhorn.de, 1 +gensend.com, 1 genshiken-itb.org, 1 genslerapps.com, 1 genslerwisp.com, 1 @@ -10440,6 +11097,7 @@ geofox.org, 1 geoip.fedoraproject.org, 1 geoip.stg.fedoraproject.org, 1 geolad.com, 0 +geometra.roma.it, 1 geoponika.gr, 1 geoport.al, 1 george-orwell.com, 1 @@ -10524,13 +11182,16 @@ getrambling.com, 1 getresilience.org, 1 getsecure.nl, 1 getsensibill.com, 1 +getsetbounce.co.uk, 1 getsetupfile.com, 1 getshifter.io, 1 getsilknow.com, 1 getspire.com, 1 getsport.mobi, 1 getsubs.net, 1 +getswadeshi.com, 1 getts.ro, 1 +getupandbounce.co.uk, 1 getvdownloader.com, 1 getwarden.net, 1 getwisdom.io, 1 @@ -10542,6 +11203,8 @@ getyourphix.tk, 1 gevaulug.fr, 1 geyduschek.be, 1 gfast.ru, 1 +gfbouncycastles.co.uk, 1 +gfcleisure.co.uk, 1 gfhgiro.nl, 0 gfk-kunststoff-luebben.de, 1 gflame.de, 1 @@ -10571,6 +11234,7 @@ ghislainphu.fr, 1 ghostblog.info, 1 ghrelinblocker.info, 1 ghrelinblocker.org, 1 +ghuntley.com, 1 giacomodrago.com, 1 giacomodrago.it, 1 giacomopelagatti.it, 1 @@ -10593,6 +11257,7 @@ giga.nl, 1 gigantism.com, 1 gigawa.lt, 1 gigawattz.com, 1 +giggletotz.co.uk, 1 gigin.me, 1 giglink.club, 1 gigolodavid.be, 1 @@ -10601,9 +11266,11 @@ gijsbertus.com, 1 gikovatelojavirtual.com.br, 1 gilangcp.com, 1 gileadpac.com, 1 +giliamor.com, 1 gillesdesnoyers.com, 1 gillesmorelle.com, 1 gillmanandsoame.co.uk, 1 +gillyscastles.co.uk, 1 gilmoreid.com.au, 1 gilnet.be, 1 gilroywestwood.org, 1 @@ -10619,6 +11286,7 @@ giochistem.it, 1 gioielleriamolena.com, 1 gip-carif-idf.net, 1 gip-carif-idf.org, 1 +giraffeinflatables.co.uk, 1 giraffes.org, 1 giri.co, 1 girlan.net, 1 @@ -10660,6 +11328,7 @@ gjspunk.de, 0 gjung.com, 0 gkralik.eu, 1 gl.search.yahoo.com, 0 +gladwellentertainments.co.uk, 1 glahcks.com, 1 glamguru.co.il, 1 glamguru.world, 1 @@ -10673,8 +11342,10 @@ glasschmuck-millefiori.de, 1 glavsudexpertiza.ru, 1 glazedmag.fr, 1 glbg.eu, 1 +glcastlekings.co.uk, 1 gleanview.com, 1 glencarbide.com, 1 +glendarraghbouncycastles.co.uk, 1 glenhuntlyapartments.com.au, 1 glidingshop.cz, 1 glidingshop.de, 1 @@ -10723,6 +11394,7 @@ gmbh-kiekin.de, 1 gmc.uy, 1 gmcd.co, 1 gmdu.net, 1 +gmind.ovh, 1 gmod.de, 1 gmpartsdb.com, 1 gmta.nl, 1 @@ -10740,6 +11412,7 @@ gn00.com, 1 gnax.jp, 1 gnetion.com, 1 gnetwork.eu, 1 +gnhub.org, 1 gnilebein.de, 1 gnom.me, 1 gnosticjade.net, 1 @@ -10755,11 +11428,12 @@ goalongtravels.com, 1 goanalyse.co.uk, 1 goapunks.net, 1 goatcloud.com, 1 +gobouncy.co.uk, 1 +gobouncy.com, 1 gocardless.com, 1 gochu.se, 1 gocleanerslondon.co.uk, 1 godesigner.ru, 1 -godrealms.com, 1 godrive.ga, 1 godsofhell.com, 1 godsofhell.de, 1 @@ -10854,6 +11528,7 @@ goto.world, 1 gotomi.info, 1 gotoxy.at, 1 gottfridsberg.org, 1 +gottfriedfeyen.com, 1 goudenharynck.be, 1 gouforit.com, 1 goukon.ru, 1 @@ -10868,6 +11543,7 @@ governorhub.com, 1 govtjobs.blog, 1 govtrack.us, 1 gowe.wang, 0 +gowildrodeo.co.uk, 1 gozadentro.com, 1 gozel.com.tr, 1 gpalabs.com, 1 @@ -10886,6 +11562,7 @@ graasp.net, 0 grabi.ga, 1 grace-wan.com, 1 gracebaking.com, 1 +gracechurchpc.net, 1 gracedays.org, 1 graceful-project.eu, 1 gracethrufaith.com, 1 @@ -10903,14 +11580,17 @@ graf.re, 1 grafcaps.com, 1 graffen.dk, 1 grafmurr.de, 1 +grahamofthewheels.com, 1 grailians.com, 1 graingert.co.uk, 1 graliv.net, 0 gramati.com.br, 1 +grammysgrid.com, 1 granary-demo.appspot.com, 0 grandcapital.cn, 1 grandcapital.id, 1 grandcapital.ru, 1 +grandcastles.co.uk, 1 grandchene.ch, 1 grande.coffee, 1 grandefratellonews.com, 1 @@ -10972,6 +11652,7 @@ greencircleplantnursery.com.au, 1 greencircleplantnursery.net.au, 1 greenglam.biz, 1 greengoblindev.com, 1 +greenliquidsystem.com, 1 greenpartyofnewmilford.org, 1 greenpeace-magazin.de, 1 greenpeace.berlin, 1 @@ -11081,6 +11762,7 @@ gscloud.xyz, 1 gsgs.se, 1 gsi-network.com, 1 gsimagebank.co.uk, 1 +gslink.me, 1 gsmkungen.com, 1 gsmsecurity.net, 1 gsoc.se, 1 @@ -11112,6 +11794,8 @@ guenthereder.at, 1 guerrilla.technology, 1 guesthouse-namaste.com, 1 guevener.de, 1 +gueze-ardeche.fr, 1 +gueze-sas.fr, 1 gufen.ga, 1 guffr.it, 1 gugaltika-ipb.org, 0 @@ -11141,6 +11825,7 @@ gulenbase.no, 1 gulfstream.ru, 1 gulleyperformancecenter.com, 1 gume4you.com, 1 +gumi.ca, 1 gummibande.noip.me, 1 gunhunter.com, 1 guniram.com, 1 @@ -11207,6 +11892,7 @@ h001.ru, 1 h09.eu, 1 h11.io, 1 h11.moe, 1 +h24.org, 1 h2cdn.cloud, 1 h2s-design.de, 1 h2u.tv, 1 @@ -11264,14 +11950,17 @@ haehnlein.at, 1 haemmerle.net, 1 haens.li, 1 hafniatimes.com, 1 +haggeluring.su, 1 haha-raku.com, 1 haiboxu.com, 1 hail2u.net, 1 hailer.com, 1 haircrazy.com, 1 hairlossstop.net, 1 +hairraisingphotobooths.co.uk, 1 hairtonic-lab.com, 1 hajnzic.at, 1 +hak5.org, 1 hakase.kr, 1 hakatabijin-mind.com, 1 hake.me, 1 @@ -11282,6 +11971,7 @@ halcyonsbastion.com, 1 half-logic.eu.org, 1 halfwaythere.eu, 1 halitopuroprodutos.com.br, 1 +halkirkbouncycastles.co.uk, 1 halkyon.net, 1 hallelujahsoftware.com, 1 halletienne.fr, 1 @@ -11309,6 +11999,7 @@ hamu.blue, 1 hana.ondemand.com, 1 hanakaraku.com, 1 hanashi.eu, 1 +hancatemc.com, 1 handcraft.eu.org, 1 handgelenkbandage-test.de, 1 handlecoin.com, 1 @@ -11349,9 +12040,11 @@ hapivm.com, 1 happist.com, 0 happyagain.de, 1 happyagain.se, 1 +happybounce.co.uk, 1 happycarb.de, 1 happydoq.ch, 1 happygadget.me, 1 +happykidscastles.co.uk, 1 happylifestyle.com, 1 happyteamlabs.com, 1 happytiger.eu, 1 @@ -11372,6 +12065,7 @@ hardrain980.com, 1 hardtfrieden.de, 1 hardtime.ru, 1 hardyboyplant.com, 1 +haribilalic.com, 1 hariome.com, 1 haritsa.co.id, 1 harmfarm.nl, 1 @@ -11385,9 +12079,12 @@ harrisonsdirect.co.uk, 1 harrisonswebsites.com, 1 harryharrison.co, 1 harrymclaren.co.uk, 1 +harryphoto.fr, 1 harrypottereditor.com, 1 harrypottereditor.net, 1 +harrysgardengamehire.co.uk, 1 harrysmallbones.co.uk, 1 +harrysqnc.co.uk, 1 harschnitz.nl, 1 hartie95.de, 1 hartlep.email, 1 @@ -11434,6 +12131,7 @@ hautarztzentrum.ch, 1 hauteslatitudes.com, 1 havasuhomepage.com, 1 havasuinsurance.com, 1 +haveabounce.co.uk, 1 haveforeningen-enghaven.dk, 1 havefunbiking.com, 1 haveibeenpwned.com, 1 @@ -11451,12 +12149,15 @@ haxdroid.com, 1 haxo.nl, 0 hayai.space, 1 hayashi-rin.net, 1 +hayden.one, 1 +haydenjames.io, 1 hayfordoleary.com, 1 haynes-davis.com, 1 haz.cat, 1 haze-productions.com, 1 haze.network, 1 haze.productions, 1 +hazeover.com, 1 hb8522.com, 1 hbbet.com, 1 hbdesign.work, 1 @@ -11578,6 +12279,7 @@ hekeki.com, 1 helber-it-services.de, 1 helden-spielen.de, 1 heldenhalde.de, 1 +heldundsexgott.de, 1 hele.cz, 1 helenaknowledge.com, 1 helenelefauconnier.com, 1 @@ -11586,6 +12288,7 @@ helichat.de, 1 helikon.ro, 1 helioanodyne.eu, 1 heliosnet.com, 1 +heliosvoting.org, 1 helix.am, 1 helixflight.com, 1 hell.sh, 1 @@ -11605,6 +12308,7 @@ help.simpletax.ca, 1 helpantiaging.com, 1 helpconnect.com.au, 1 helpekwendenihospital.com, 1 +helpflux.com, 1 helpgoabroad.com, 1 helpstarloja.com.br, 1 helsingfors.guide, 1 @@ -11617,11 +12321,15 @@ hemnet.se, 1 hen.ne.ke, 1 hendersonrealestatepros.com, 1 hendric.us, 1 +hendrinortier.nl, 1 hendyisaac.com, 1 hengelsportdeal.com, 1 +hengstumone.com, 1 henhenlu.com, 1 henkbrink.com, 1 +henker.net, 1 henkverlinde.com, 0 +henleybouncycastles.co.uk, 1 hennadesigns.org, 1 hennecke-forstbetrieb.de, 1 henneke.me, 1 @@ -11651,15 +12359,18 @@ herculex.fi, 1 herds.eu, 1 herdserv.de, 1 here.ml, 1 +here4funpartysolutions.ie, 1 herebedragons.io, 1 herecsrymy.cz, 1 heribe-maruo.com, 1 +heritagebaptistchurch.com.ph, 1 hermanbrouwer.nl, 1 hermes-net.de, 1 hermes-servizi.it, 1 herndl.org, 1 herni-kupony.cz, 1 herocentral.de, 1 +herohirehq.co.uk, 1 heroicpixel.com, 1 heroin.org.uk, 1 heroku.com, 1 @@ -11667,6 +12378,7 @@ herr-webdesign.de, 1 herrderzeit.de, 1 herringsresidence.be, 1 herrsmith.com, 1 +hertsbouncycastles.com, 1 hertz.bj, 1 herzig.cc, 1 hesaplama.net, 1 @@ -11749,6 +12461,7 @@ hickorywinecellar.com, 1 hicl.org, 1 hicoria.com, 1 hidbo.de, 1 +hiddenhillselectrical.com, 1 hiddenmalta.net, 1 hiddenprocess.com, 1 hideallip.com, 1 @@ -11779,6 +12492,7 @@ hilaolu.com, 1 hilaolu.studio, 1 hilchenba.ch, 1 hill.selfip.net, 1 +hillebrand.io, 1 hillsboroccpa.org, 1 hilnu.com, 1 hilti.ee, 0 @@ -11812,6 +12526,7 @@ hirake55.com, 1 hiraku.me, 1 hiratake.xyz, 1 hire-a-coder.de, 1 +hireabouncycastle.net, 1 hiresuccessstaffing.com, 1 hirezzportal.com, 1 hirotaka.org, 1 @@ -11821,6 +12536,7 @@ hisbrucker.net, 1 hisnet.de, 1 hispanic.dating, 1 histoire-cite.ch, 1 +histoire-theatre.com, 1 historia-arte.com, 1 history.google.com, 1 history.pe, 1 @@ -11842,6 +12558,7 @@ hiyuki2578.net, 1 hizzacked.xxx, 1 hj.rs, 1 hjartasmarta.se, 1 +hjes.com.ve, 1 hjf-immobilien.de, 1 hjortland.org, 1 hk.search.yahoo.com, 0 @@ -11881,12 +12598,14 @@ hoekvanholland.eu, 1 hoelty.network, 1 hoesnelwasik.nl, 1 hoewler.ch, 1 +hoezzi.nl, 1 hoffens.se, 1 hoflerlawfirm.com, 1 hogl.dk, 1 hohm.in, 1 hohnet.com, 1 hoikuen-now.top, 1 +hoiquanadida.com, 1 hoken-wakaru.jp, 1 hokieprivacy.org, 1 hokify.at, 1 @@ -11933,6 +12652,7 @@ homecareassociatespa.com, 1 homecarpetcleaning.co.uk, 1 homecoming.city, 1 homefacialpro.com, 1 +homegardeningforum.com, 1 homegardenresort.nl, 1 homehuntertoronto.com, 1 homehunting.pt, 1 @@ -11943,6 +12663,7 @@ homeownersassociationmanagementla.com, 1 homeownersinsurancenevada.com, 1 homeownersinsurancenv.com, 1 homeprivate.de, 1 +homeremodelingcontractorsca.com, 1 homesandal.com, 1 homeseller.com, 1 homesfordinner.ca, 1 @@ -11991,11 +12712,13 @@ horaceli.com, 1 horackova.info, 1 hord.ca, 1 horeizai.net, 1 +horisonttimedia.fi, 1 horizonhomes-samui.com, 1 horizonshypnosis.ca, 1 horkel.cf, 1 hornyforhanzo.com, 1 horodance.dk, 1 +horrell.ca, 1 horrendous-servers.com, 1 horror-forum.de, 1 horsehunter.co.uk, 1 @@ -12015,6 +12738,7 @@ hostam.link, 1 hostarea51.com, 1 hosted-oswa.org, 1 hostedbgp.net, 1 +hostedcomments.com, 1 hostedtalkgadget.google.com, 1 hostfission.com, 1 hostfuture.co.in, 1 @@ -12046,6 +12770,7 @@ hotelident.de, 1 hotelmadhuwanvihar.com, 1 hotelmap.com, 1 hotelsinformer.com, 1 +hotelvalena.com, 1 hothbricks.com, 1 hoto.us, 1 hoton.in, 1 @@ -12057,6 +12782,8 @@ hottaro.com, 1 hottestwebcamgirls.org, 1 hottheme.net, 1 hotting.nl, 1 +hottubhirenewcastle.co.uk, 1 +hottubspasnewcastle.co.uk, 1 houdremont-la-courneuve.info, 1 houraiteahouse.net, 1 house-of-japan.co.jp, 1 @@ -12064,6 +12791,7 @@ house-sparrow.com, 1 houseboydesigns.com, 1 houseinvestor.com, 1 houser.lu, 1 +housetalk.ru, 1 houstonapartmentinsiders.com, 1 houstoncreditlaw.com, 1 houtinee.com, 1 @@ -12154,7 +12882,6 @@ huagati.com, 1 huahinpropertylisting.com, 1 huang.nu, 1 huangguancq.com, 1 -huangjingjing.com, 1 huangzenghao.cn, 1 huangzenghao.com, 1 huaxueba.com, 1 @@ -12170,6 +12897,7 @@ huersch.com, 1 huffduffer.com, 1 hughtodd.ink, 1 hugi.is, 1 +huglen.info, 1 hugofs.com, 1 hugolynx.fr, 1 huguesblanchard.paris, 1 @@ -12204,6 +12932,7 @@ hund.io, 1 hundeformel.de, 1 hundter.com, 1 hunter.io, 1 +huntingdonbouncers.co.uk, 1 huntingdonlifesciences.com, 1 huntshomeinspections.com, 1 huongquynh.com, 1 @@ -12256,6 +12985,7 @@ hydrocloud.net, 1 hydronyx.me, 1 hydroturbine.info, 1 hydrozone.fr, 1 +hyeok.org, 1 hygo.com, 1 hyk.me, 1 hylians.com, 1 @@ -12350,6 +13080,7 @@ icewoman.net, 1 ich-tanke.de, 1 ichasco.com, 1 ichbinkeinreh.de, 1 +ichmachdas.net, 1 ichronos.net, 1 iclinic.ua, 1 icmhd.ch, 1 @@ -12373,6 +13104,7 @@ ictradar.com, 1 icusignature.com, 1 icyapril.com, 1 icymint.me, 1 +icys2017.com, 1 id-blog.ch, 1 id.atlassian.com, 1 id.fedoraproject.org, 0 @@ -12390,6 +13122,7 @@ idcrane.com, 1 iddconnect.com, 1 iddconnect.org, 1 ideadozz.hu, 1 +idealinflatablehire.co.uk, 1 idealtruss.com, 1 idealtruss.com.tw, 1 idealwhite.space, 1 @@ -12417,10 +13150,12 @@ idolf.dk, 1 idolish7.fun, 1 idontplaydarts.com, 1 idranktoomuch.coffee, 1 +idraulico.roma.it, 1 idrinktoomuch.coffee, 1 idrycleaningi.com, 1 idsafe.co.za, 1 idsoccer.com, 1 +idtechnowizard.com, 1 idtheft.gov, 1 idubaj.cz, 1 idunno.org, 1 @@ -12434,6 +13169,7 @@ ieji.de, 0 iemas.azurewebsites.net, 1 iemb.cf, 1 iemb.tk, 1 +ienakanote.com, 1 ieval.ro, 1 iewar.com, 1 iexpert9.com, 1 @@ -12460,6 +13196,7 @@ ifsr.de, 1 iftrue.de, 1 ifxnet.com, 1 ifxor.com, 1 +ifyou.live, 1 iga-semi.jp, 1 igamingforums.com, 1 igglabs.com, 1 @@ -12475,12 +13212,12 @@ ignace72.eu, 1 ignat.by, 1 ignatovich.by, 1 ignatovich.me, 1 +ignet.gov, 1 ignitedmindz.in, 1 igorw.org, 1 igotoffer.com, 0 igrivi.com, 1 igsmgmt.com, 1 -iguana.com.ec, 0 ih8sn0w.com, 1 ihacklabs.com, 1 ihatethissh.it, 1 @@ -12497,12 +13234,15 @@ iiong.com, 0 iirii.com, 1 ijohan.nl, 1 ijsclubtilburg.nl, 1 +ijunohana.jp, 1 ikachalife.com, 1 ikarate.ru, 1 ikeacareers.co.uk, 1 +ikenmeyer.com, 1 ikenmeyer.eu, 1 ikeyless.com, 1 ikiler.com, 1 +ikinokori-marketing.com, 1 ikk.me, 1 ikkatsu-satei.jp, 1 ikkoku.de, 1 @@ -12522,6 +13262,7 @@ ilamparas.com.ve, 1 ilamparas.mx, 1 ilard.fr, 1 ilazycat.com, 1 +ildomani.it, 1 ile-kalorii.pl, 1 ile-sapporo.jp, 1 ileat.com, 1 @@ -12566,9 +13307,11 @@ imaginarymakings.me, 1 imagine-programming.com, 1 imagr.io, 1 imanageproducts.uk, 1 +imanesdeviaje.com, 1 imanhearts.com, 1 imanolbarba.net, 1 imanudin.net, 1 +imarkethost.co.uk, 1 imawhale.com, 1 imbianchino.roma.it, 1 imbrian.org, 1 @@ -12627,6 +13370,7 @@ impacter.eu, 1 impactfestival.be, 1 impactpub.ch, 1 impakho.com, 1 +impas.se, 1 imperdin.com, 1 imperdintechnologies.com, 1 imperial-legrand.com, 1 @@ -12638,7 +13382,9 @@ impiantistica.org, 1 implicitdenial.com, 1 impotsimple.ca, 1 imppac.de, 1 +imprendo.co, 1 imprendo.pro, 1 +impresa-pulizie.it, 1 improklinikken.dk, 1 impulse-clan.de, 1 impulsionsa.com, 1 @@ -12654,6 +13400,8 @@ in.search.yahoo.com, 0 in.xero.com, 0 in10tion.com, 0 inabox.ro, 1 +inait.ai, 1 +inandeyes.com, 1 inares.org, 1 inbitcoin.it, 1 inbounder.io, 1 @@ -12689,6 +13437,7 @@ indieethos.com, 1 indiegame.space, 1 indiemods.com, 1 indievelopment.nl, 1 +indigoinflatables.com, 1 indigosakura.com, 1 indilens.com, 1 inditip.com, 1 @@ -12718,13 +13467,19 @@ inexpensivecomputers.net, 1 inficom.org, 1 infinether.net, 1 infinitegroup.info, 1 +infinitiofallentownparts.com, 1 infinitiofaugustaparts.com, 1 infinitioflynnwoodparts.com, 1 infinitiofmarinparts.com, 1 infinity.to, 1 +infinitybas.com, 1 infinityengine.org, 1 infinityepos.co.uk, 1 infirmieredevie.ch, 1 +inflatablehire-scotland.co.uk, 1 +inflatablesny.com, 1 +inflatadays.co.uk, 1 +inflatamania.com, 1 inflexsys.com, 1 influencerchampions.com, 1 influo.com, 1 @@ -12752,6 +13507,7 @@ infosenior.ch, 1 infotainworld.com, 1 infotune.nl, 1 infovae-idf.com, 1 +infovision-france.com, 1 infoweb.ee, 1 infoworm.org, 1 infra-con.dk, 0 @@ -12762,6 +13518,7 @@ ingalls.run, 1 ingber.com, 1 inge-r.nl, 1 ingenius.ws, 1 +ingerhy.com, 1 ingjobs.ch, 1 inglesnarede.com.br, 1 ingo-schlueter.de, 1 @@ -12770,6 +13527,7 @@ ingresscode.cn, 1 inhaltsangabe.de, 1 inheritestate.com, 1 inhive.group, 1 +inhouseents.co.uk, 1 iniiter.com, 1 inima.org, 1 inios.fr, 0 @@ -12815,12 +13573,14 @@ inorder.website, 1 inovat.ma, 1 inovatec.com, 1 inoxio.de, 1 +inpas.co.uk, 1 ins1gn1a.com, 1 insane.zone, 1 insblauehinein.nl, 1 inschrijfformulier.com, 1 inscript.pl, 1 insertcoins.net, 1 +insgesamt.net, 1 inshapenutrition.com.br, 1 insho.fashion, 1 insideaudit.com, 1 @@ -12872,6 +13632,7 @@ integrationinc.com, 0 integraxor.com.tw, 1 integrity.gov, 1 integrityingovernmentidaho.com, 1 +integrityoklahoma.com, 1 integrogroup.com, 1 integromat.com, 1 intelbet.es, 1 @@ -12882,6 +13643,7 @@ intellectdynamics.com, 1 intelligence-explosion.com, 1 intellinetixvibration.com, 1 intencje.pl, 1 +intensifyrsvp.com.au, 1 inter-corporate.com, 1 inter-culinarium.com, 1 interaffairs.com, 1 @@ -12894,6 +13656,7 @@ interessiert-uns.net, 1 interfesse.net, 1 interflores.com.br, 1 interfug.de, 1 +interimages.fr, 1 interiorcheapo.com, 1 interiordesignsconcept.com, 1 interisaudit.com, 1 @@ -12902,6 +13665,7 @@ intermax.nl, 1 intermedinet.nl, 1 intermezzo-emmerich.de, 1 intermezzo-emmerich.nl, 1 +internaluse.net, 1 international-arbitration-attorney.com, 1 internationalfashionjobs.com, 1 internaut.co.za, 1 @@ -12962,6 +13726,7 @@ inventaire.ch, 1 inventionsteps.com.au, 1 inventix.nl, 1 inventtheworld.com.au, 1 +investarholding.nl, 1 investigazionimoretti.it, 1 investingdiary.cn, 1 investingtrader.net, 1 @@ -12983,6 +13748,7 @@ invoicefinance.com, 1 invoicefinance.nl, 1 inwestcorp.se, 1 inzdr.com, 1 +iobint.com, 1 iocheck.com, 0 iodice.org, 1 iodu.re, 1 @@ -13026,6 +13792,7 @@ iplantom.com, 1 ipleak.net, 1 ipledgeonline.org, 0 iplog.info, 1 +ipmonitoring.hu, 1 ipmotion.ca, 1 ipnetworking.net, 1 ipo-times.com, 1 @@ -13175,6 +13942,7 @@ isv.online, 1 isvbscriptdead.com, 1 it-adminio.ru, 1 it-fernau.com, 1 +it-kron.de, 1 it-labor.info, 1 it-rotter.de, 1 it-schamans.de, 1 @@ -13230,6 +13998,7 @@ itpro-mg.de, 1 itpro.ua, 1 itproject.guru, 1 itrack.in.th, 1 +itraveille.fr, 1 itring.pl, 1 itruss.com.tw, 1 its-future.com, 1 @@ -13237,18 +14006,22 @@ its-gutachten.de, 1 its-schindler.de, 1 its-v.de, 1 its4living.com, 1 +itsabouncything.com, 1 itsanicedoor.co.uk, 1 itsasaja.com, 1 itsatrap.nl, 0 itsdcdn.com, 1 +itsecblog.de, 1 itsecguy.com, 0 itsevident.com, 1 itsgoingdown.org, 1 itshka.rv.ua, 1 itskayla.com, 1 itsmejohn.org, 1 +itsmyparty.ie, 1 itsnotquitethehilton.com, 1 itsok.de, 1 +itspartytimeonline.co.uk, 1 itspawned.com, 1 itspersonaltraining.nl, 1 itsryan.com, 1 @@ -13304,6 +14077,7 @@ ixquick.eu, 1 ixquick.fr, 1 ixquick.info, 1 ixquick.nl, 1 +iyinolaashafa.com, 1 iz8mbw.net, 1 izevg.ru, 1 izodiacsigns.com, 1 @@ -13312,6 +14086,7 @@ izumi.tv, 1 j-eck.nl, 1 j-elliott.co.uk, 1 j-navi.com, 1 +j0m.de, 1 j0ng.xyz, 1 j0s.at, 1 j0s.eu, 1 @@ -13339,6 +14114,7 @@ jackdawphoto.co.uk, 1 jackdelik.de, 1 jackf.me, 1 jackingramnissanparts.com, 1 +jackpothappy.com, 1 jackrusselterrier.com.br, 1 jackyliao123.tk, 1 jackyyf.com, 0 @@ -13352,6 +14128,7 @@ jacobsenarquitetura.com, 1 jacuzziprozone.com, 1 jadopado.com, 1 jaegerlacke.de, 1 +jagbouncycastles.co.uk, 1 jagerman.com, 1 jaguarlandrover-asse.be, 1 jaguarlandrover-occasions.be, 1 @@ -13417,7 +14194,9 @@ jamielinux.com, 1 jamiemagee.co.uk, 1 jamiemagee.dk, 1 jamiepeters.nl, 1 +jamieweb.net, 1 jammucake.com, 1 +jammysplodgers.co.uk, 1 jamon.ca, 1 jamonsilva.com, 1 jamstatic.fr, 1 @@ -13429,6 +14208,8 @@ jan-rieger.de, 1 jan-von.de, 1 janada.cz, 1 janaundgeorgsagenja.eu, 1 +jangocloud.tk, 1 +janheidler.dynv6.net, 1 jani.media, 1 janiat.com, 1 janik.xyz, 1 @@ -13499,12 +14280,14 @@ jazzncheese.com, 1 jazzy.id.au, 1 jazzy.pro, 1 jazzysumi.com, 1 +jballelectronics.com, 1 jbbd.fr, 1 jbelien.be, 1 jbelien.photography, 1 jbradaric.me, 1 jbrowndesign.me, 1 jbs-jardins.ch, 1 +jbsinternational.com, 1 jbt-stl.com, 1 jcaicedo.com, 1 jcaicedo.tk, 1 @@ -13521,14 +14304,20 @@ jdcdirectsales.com, 1 jdcdirectsales.com.ph, 1 jdcgroup.com.ph, 1 jdh8.org, 1 +jdheysupplies.co.uk, 1 jdoi.pw, 1 jdoiron.me, 1 +jdpleisure.co.uk, 1 +jdscastlehire.co.uk, 1 jdsf.tk, 1 jdtic.com, 1 jdubya.info, 1 je-vends.fr, 1 je2050.de, 1 jean-remy.ch, 1 +jeandanielfaessler.ch, 1 +jeankygourmet.com, 1 +jeanmarieayer.ch, 1 jeannecalment.com, 1 jeannelucienne.fr, 1 jeanneret-combustibles.ch, 1 @@ -13590,9 +14379,12 @@ jeroendeneef.com, 1 jeroenvanderwal.nl, 1 jerrypau.ca, 1 jerryyu.ca, 1 +jerseybikehire.co.uk, 1 +jerseyjumpingbeans.co.uk, 1 jerseylvi2013.org, 1 jesseerbach.com, 1 jessekaufman.com, 1 +jessesjumpingcastles.co.uk, 1 jessevictors.com, 1 jessgranger.com, 1 jesters-court.net, 1 @@ -13602,6 +14394,7 @@ jet-stream.fr, 1 jetbbs.com, 1 jetkittens.co.uk, 1 jetmirshatri.com, 1 +jeton.com, 1 jetsetboyz.net, 1 jetsieswerda.nl, 1 jettlarue.com, 1 @@ -13613,6 +14406,7 @@ jevisite.ca, 1 jeweet.net, 1 jez.nl, 1 jf-projects.de, 0 +jfnllc.com, 1 jfr.im, 1 jfreitag.de, 1 jgid.de, 1 @@ -13623,6 +14417,7 @@ jhalderm.com, 1 jhaveri.net, 1 jhburton.co.uk, 1 jhcommunitysports.co.uk, 1 +jhe.li, 1 jhermsmeier.de, 1 jhollandtranslations.com, 1 jhuang.me, 1 @@ -13638,6 +14433,7 @@ jimbraaten.com, 1 jimbutlerkiaparts.com, 1 jimdorf.com, 1 jimmycai.com, 1 +jimmycn.com, 1 jimmynelson.com, 1 jimmyroura.ch, 1 jimshaver.net, 1 @@ -13663,9 +14459,13 @@ jiyuu-ni.com, 1 jiyuu-ni.net, 1 jjf.org.au, 1 jjj.blog, 1 +jjspartyhire.co.uk, 1 +jjspartytime.co.uk, 1 jjvanoorschot.nl, 1 +jk-entertainment.biz, 1 jka.io, 1 jkchocolate.com, 1 +jkinteriorspa.com, 1 jkirsche.com, 1 jkrippen.com, 1 jlhmedia.com, 1 @@ -13673,12 +14473,14 @@ jlkhosting.com, 1 jlponsetto.com, 1 jlr-luxembourg.com, 1 jm-bea.net, 1 +jmalarcon.es, 1 jmarciniak.it, 1 jmb.lc, 1 jmbelloteau.com, 1 jmcashngold.com.au, 1 jmcleaning.services, 1 jmedved.com, 1 +jmentertainment.co.uk, 1 jmk.hu, 1 jmoreau.ddns.net, 1 jmotion.co.uk, 1 @@ -13735,6 +14537,7 @@ joelfries.com, 1 joelj.org, 1 joelle.me, 1 joelleandpeter.co.uk, 1 +joellimberg.com, 1 joelmunch.com, 1 joepitt.co.uk, 0 joerg-wellpott.de, 0 @@ -13744,7 +14547,7 @@ joestead.codes, 1 joetyson.io, 1 joetyson.me, 1 joeysmith.com, 1 -jogi-server.de, 0 +jogi-server.de, 1 jogorama.com.br, 0 johanbissemattsson.se, 0 johand.io, 1 @@ -13760,6 +14563,7 @@ johnblackbourn.com, 1 johndong.net, 0 johnfulgenzi.com, 1 johngallias.com, 1 +johngo.tk, 1 johnguant.com, 1 johnmalloneemd.com, 0 johnmcintosh.pro, 1 @@ -13775,17 +14579,20 @@ johnsegovia.com, 1 johnsiu.com, 1 johnvanhese.nl, 1 joi-dhl.ch, 1 +jojosplaycentreandcafeteria.co.uk, 1 jokedalderup.nl, 1 joker.menu, 1 jokerice.co.uk, 1 jokescoff.com, 1 jokewignand.nl, 1 jollausers.de, 1 +jollykidswobbleworld.co.uk, 1 jomo.tv, 1 jomp16.tk, 1 jonandnoraswedding.com, 1 jonarcher.info, 1 jonas-thelemann.de, 1 +jonas-wenk.de, 1 jonaskjodt.com, 1 jonasmoeller.consulting, 0 jonasmoeller.de, 0 @@ -13793,6 +14600,7 @@ jonaswitmer.ch, 1 jonathan-apps.com, 1 jonathancarter.org, 1 jonathandowning.uk, 0 +jonathandupree.com, 1 jonathanmassacand.ch, 1 jonathanreyes.com, 1 jonathansanchez.pro, 1 @@ -13839,6 +14647,7 @@ joseetesser.nl, 1 josef-lotz.de, 1 josefjanosec.com, 1 josefottosson.se, 1 +josegerber.ch, 1 josemikkola.fi, 1 josepbel.com, 1 josephre.es, 1 @@ -13870,6 +14679,7 @@ joyceclerkx.com, 1 joyful.house, 1 joyfulexpressions.gallery, 1 joyofcookingandbaking.com, 1 +jpcrochetapparel.com, 1 jpdeharenne.be, 1 jpeg.io, 1 jpgangbang.com, 1 @@ -13883,6 +14693,7 @@ jps-selection.co.uk, 1 jps-selection.com, 1 jps-selection.eu, 1 jpshop.ru, 1 +jpsinflatables.co.uk, 1 jpslconsulting.ca, 1 jr5devdoug.xyz, 1 jr5devdouglas.xyz, 1 @@ -13894,8 +14705,10 @@ jross.me, 1 jrtapsell.co.uk, 0 jrxpress.com, 1 js-online.net, 1 +jschoi.org, 1 jschumacher.info, 1 jsd-cog.org, 1 +jsent.co.uk, 1 jsevilleja.org, 1 jsjyhzy.cc, 1 jskier.com, 0 @@ -13906,6 +14719,8 @@ json-viewer.com, 1 jstelecom.com.br, 1 jsteward.moe, 1 jstore.ch, 1 +jsvr.tk, 1 +jtcat.com, 1 jthackery.com, 0 jts3servermod.com, 1 jtslay.com, 1 @@ -13944,6 +14759,7 @@ julianweigle.de, 1 juliaoantiguidades.com.br, 1 juliawebber.co.za, 1 julibear.com, 1 +julico.nl, 1 julie-and-stevens-wedding.com, 1 juliekoubova.net, 1 juliemaurel.fr, 1 @@ -13956,15 +14772,33 @@ jultube.de, 1 jumba.com.au, 1 jumbopan.com, 1 jumbopan.net, 1 +jump-zone.co.uk, 1 jump.bg, 0 jump.wtf, 1 +jump4funinflatables.co.uk, 1 +jumpandbounce.co.uk, 1 +jumpandjivechildrensparties.co.uk, 1 +jumparoundbouncycastles.co.uk, 1 +jumparoundreading.co.uk, 1 +jumparty.co.uk, 1 +jumpeasy.com.au, 1 +jumperoos.co.uk, 1 +jumpin-jax.co.uk, 1 jumpinchat.com, 1 +jumpingbee.co.uk, 1 +jumpingcastlesonline.com.au, 1 +jumpingjacksbouncycastles.co.uk, 1 +jumpinjaes.co.uk, 1 +jumpinmonkeys.co.uk, 1 jumpman-iphone-design.de, 1 +jumpnplay.co.uk, 1 +junespina.com, 1 junethack.net, 1 jungaa.fr, 1 jungesforumkonstanz.de, 1 jungleculture.co.za, 1 jungleducks.ca, 1 +junglejackscastles.co.uk, 1 junglist.org, 1 juni.io, 1 juniperroots.ca, 1 @@ -13987,9 +14821,11 @@ justbookexcursions.com, 1 justbookhotels.com, 1 justbooktransfers.com, 1 justboom.co, 1 +justbouncecastles.co.uk, 1 justchunks.net, 1 justgalak.com, 1 justgalak.org, 1 +justice.gov, 1 justice4assange.com, 1 justinellingwood.com, 1 justinharrison.ca, 1 @@ -14002,11 +14838,15 @@ justyy.com, 1 justzz.xyz, 1 jutlander-netbank.dk, 1 jutlander.dk, 1 +juventusclublugano.ch, 1 juventusmania1897.com, 1 +juwelierstoopman.nl, 1 juzgalo.com, 1 jva-wuerzburg.de, 1 jvanerp.nl, 1 +jvbouncycastlehire.co.uk, 1 jvn.com, 1 +jvphotoboothhire.co.uk, 1 jvwdev.nl, 1 jwatt.org, 1 jwe.nl, 1 @@ -14052,6 +14892,7 @@ kaffeekrone.de, 1 kafoom.de, 1 kaheim.de, 0 kai-ratzeburg.de, 1 +kaibol.com, 1 kaigojj.com, 1 kaika-facilitymanagement.de, 1 kaika-hms.de, 1 @@ -14089,6 +14930,7 @@ kall.is, 1 kallies-net.de, 1 kalmar.com, 1 kaloix.de, 1 +kalsbouncies.com, 1 kaltenbrunner.it, 1 kalterersee.ch, 1 kamalame.co, 1 @@ -14104,9 +14946,12 @@ kanar.nl, 1 kancolle.me, 1 kandalife.com, 1 kandec.co.jp, 1 +kanecastles.com, 1 kanehusky.com, 1 kanganer.com, 1 +kangaroo-bouncycastle.co.uk, 1 kangarooislandholidayaccommodation.com.au, 1 +kangaroojacks.co.uk, 1 kangaroos.org, 1 kangaroovalleykayaks.com.au, 1 kangaroovalleymuseum.com, 1 @@ -14145,6 +14990,7 @@ karamna.com, 1 karamomo.net, 1 karanjthakkar.com, 1 karanlyons.com, 1 +karasik.by, 1 karateka.org, 1 karateka.ru, 1 karatorian.org, 1 @@ -14199,10 +15045,13 @@ kathardt.de, 1 kathegiraldo.com, 1 kati-raumplaner.de, 1 katiechai.xyz, 1 +katieskandy.co.uk, 1 +katieskastles.co.uk, 1 katja-nikolic-design.de, 1 katka.info, 1 katnunn.co.uk, 1 katrinjanke.de, 1 +katscastles.co.uk, 1 kattelans.eu, 1 kattenfun.be, 1 kattenfun.nl, 1 @@ -14238,10 +15087,12 @@ kazy111.info, 1 kb3.net, 1 kba-online.de, 1 kbb-ev.de, 1 +kbbouncycastlehire.co.uk, 1 kbcequitas.hu, 1 kbfl.org, 1 kbit.dk, 1 kbjorklu.com, 1 +kbleventhire.co.uk, 1 kc-holzfaeller.de, 1 kc5mpk.com, 1 kcptun.com, 1 @@ -14274,6 +15125,7 @@ kehlenbach.net, 1 keifel.de, 1 kein-design.de, 1 kein-fidget-spinner-werden.de, 1 +keinanung.nl, 1 keinefilterblase.de, 1 keisaku.org, 1 keishiando.com, 1 @@ -14286,6 +15138,7 @@ kela.jp, 1 kelgtermans-usedcars.be, 1 kellyandantony.com, 1 kellygrenard.com, 1 +kellyskastles.co.uk, 1 kelm.me, 1 kelmarsafety.com, 1 kempkens.io, 1 @@ -14313,6 +15166,7 @@ keno.im, 1 kenoschwalb.com, 1 kenrogers.co, 1 kens.pics, 1 +kensbouncycastles.co.uk, 1 kentec.net, 1 kenterlis.gr, 1 kenvix.com, 1 @@ -14360,6 +15214,7 @@ keybase.io, 1 keybored.me, 1 keycdn.com, 1 keycenter.com.br, 1 +keycontainers.co.za, 1 keyerror.com, 1 keyholdingservices.co.uk, 1 keyihao.cn, 1 @@ -14376,6 +15231,7 @@ kgb.us, 1 kgm-irm.be, 1 kgnk.ru, 1 khanovaskola.cz, 1 +khas.co.uk, 1 kheshtar.pl, 1 khetzal.info, 1 khipu.com, 1 @@ -14400,12 +15256,17 @@ kickstart.com.pk, 0 kidbacker.com, 1 kiddyboom.ua, 1 kids-at-home.ch, 1 +kids-castles.com, 1 kidsforsavingearth.org, 1 kidsinwoods-interfacesouth.org, 1 kidsmark.net, 1 kidsneversleep.com, 1 +kidsplay-plymouth.co.uk, 1 +kidsplaybouncycastles.co.uk, 1 kidswallstickers.com.au, 1 kidtoyshop.ru, 1 +kidzpartiesllp.co.uk, 1 +kidzsmile.co.uk, 1 kiebel.de, 1 kiedys.net, 1 kiefer-networks.de, 1 @@ -14421,6 +15282,7 @@ kievradio.com, 1 kiffmarks.com, 1 kigmbh.com, 1 kikbb.com, 1 +kiki-voice.jp, 1 kiku.pw, 1 kikuzuki.org, 1 kilerd.me, 1 @@ -14428,6 +15290,7 @@ kilianvalkhof.com, 1 kill-paff.com, 1 killaraapartments.com.au, 1 killerrobots.com, 1 +killymoonbouncycastles.com, 1 kilobyte22.de, 1 kilogram.nl, 1 kilometertje.nl, 1 @@ -14438,6 +15301,7 @@ kimmel.com, 1 kimmel.in, 1 kimoota.net, 0 kimotodental.com, 1 +kimscrazeecastles.co.uk, 1 kimsufi-jordi.tk, 1 kinderbasar-luhe.de, 1 kinderbuecher-kostenlos.de, 1 @@ -14447,13 +15311,20 @@ kinepolis-studio.be, 1 kinepolis-studio.ga, 1 kinetiq.com, 1 kineto.space, 1 +king-henris-castles.co.uk, 1 +king-of-the-castles.com, 1 kingant.net, 1 kinganywhere.eu, 1 kingbird.me, 1 kingclass.cn, 1 kingdomcrc.org, 1 +kingiescastles.co.uk, 1 kinglaksa.com, 0 kingofshooting.com, 1 +kingofthecastlecoventry.co.uk, 1 +kingofthecastlesentertainments.co.uk, 1 +kingofthecastlesouthwales.co.uk, 1 +kingofthecastlesrhyl.co.uk, 1 kingopen.cn, 1 kingpincages.com, 1 kingqueen.org.uk, 1 @@ -14488,6 +15359,7 @@ kirchen-im-web.de, 1 kirchengemeinde-markt-erlbach.de, 1 kircp.com, 1 kirei.se, 1 +kirig.ph, 1 kirill.ws, 1 kirillpokrovsky.de, 1 kirinas.com, 1 @@ -14602,6 +15474,7 @@ klva.cz, 1 km-net.pl, 1 kmashworth.co.uk, 1 kmkz.jp, 1 +kmsci.com.ph, 1 kn007.net, 1 knaake.net, 1 knab-networks.com, 1 @@ -14658,6 +15531,7 @@ kofler.info, 1 kogak.ninja, 1 kogi.fr, 1 kogro.de, 1 +kogudesi.com, 1 koha.be, 1 kohlistkool.tk, 1 koho.fi, 1 @@ -14707,12 +15581,14 @@ konkurs.ba, 1 konoe.studio, 1 konosuke.jp, 1 konsertoversikt.no, 1 +konst.se, 1 kontakthuman.hu, 1 kontaxis.org, 1 kontorhaus-schlachte.de, 1 konventseliten.se, 1 konyalian.com, 1 konzertheld.de, 1 +koodimasin.ee, 1 koolikatsed.ee, 1 koop-bremen.de, 1 kooponline.eu, 1 @@ -14749,15 +15625,18 @@ kotilinkki.fi, 1 kotitesti.fi, 1 kotomei.moe, 1 kotori.love, 1 +kotorimusic.ga, 1 kottur.is, 1 koumuwin.com, 1 kousaku.jp, 0 +koushinjo.org, 1 kovaldo.ru, 1 kovals.sk, 1 kovnsk.net, 1 kovspace.com, 1 kowalmik.tk, 1 kowarschick.de, 1 +kowshiksundararajan.com, 1 koyaanis.com, 1 kozmik.co, 1 kozuch.biz, 1 @@ -14794,6 +15673,9 @@ krasavchik.by, 1 krasota.ru, 0 krasovsky.me, 1 kraynik.com, 1 +krazykastles.co.uk, 1 +krazykoolkastles.com, 1 +krazyphotobooths.co.uk, 1 krc.link, 1 kreationnext.com, 1 kreativelabs.ch, 1 @@ -14815,6 +15697,7 @@ krismurray.co.uk, 1 krisstarkey.co.uk, 1 kristikala.nl, 1 kristinbailey.com, 1 +kristofdv.be, 1 krizek.cc, 1 krk-media.pl, 0 krmeni.cz, 1 @@ -14846,6 +15729,7 @@ ks-watch.de, 1 kschv-rdeck.de, 1 ksero.center, 1 kshlm.in, 1 +kspg.tv, 1 kswcosmetics.com, 1 ktbnetbank.com, 1 kteen.info, 1 @@ -14864,6 +15748,7 @@ kubik-rubik.de, 0 kubiwa.net, 1 kubkprf.ru, 1 kubusadvocaten.nl, 1 +kuchenschock.de, 1 kuchentraum.eu, 1 kucheryavenkovn.ru, 1 kucnibudzet.com, 1 @@ -14907,14 +15792,17 @@ kurashino-mall.com, 1 kurofuku.me, 1 kuroisalva.xyz, 0 kurona.ga, 1 +kuronekogaro.com, 1 kurschies.de, 1 kursprogramisty.pl, 1 kurswahl-online.de, 1 kuruppa.xyz, 1 kuschku.de, 1 kusdaryanto.web.id, 1 +kushtikidsparties.co.uk, 1 kusochi.eu, 1 kutinsoft.com, 1 +kutsankaplan.com, 1 kutukupret.com, 1 kutus.ee, 1 kuwago.io, 1 @@ -14947,6 +15835,7 @@ kylebaldw.in, 1 kylejohnson.io, 1 kylelaker.com, 1 kylerwood.com, 1 +kylescastles.co.uk, 1 kyliehunt.com, 1 kylinj.com, 0 kylling.io, 1 @@ -14960,6 +15849,7 @@ kyoto-k9.com, 1 kyoto-mic.com, 1 kyoto-tomikawa.jp, 1 kyoto-tomoshibi.jp, 1 +kyras-castles.co.uk, 1 kyujin-office.net, 1 kyunyuki.com, 1 kyusyu.org, 1 @@ -14988,6 +15878,7 @@ labfox.de, 1 labiblioafronebrulepas.com, 1 labobooks.com, 1 laboiteanem.fr, 1 +labouncycastlehire.co.uk, 1 labourreedevergheas.fr, 1 laboutiquemarocaineduconvoyeur.com, 1 laboutiquemarocaineduconvoyeur.ma, 1 @@ -15012,6 +15903,7 @@ laclefdor.ch, 1 lacliniquefinanciere.com, 1 lacyc3.eu, 1 ladbroke.net, 1 +lady-2.jp, 1 ladybugjam.com, 1 ladylikeit.com, 1 laextra.mx, 1 @@ -15032,6 +15924,7 @@ laglab.org, 1 laguiadelvaron.com, 1 laguinguette.fr, 1 lahora.com.ec, 1 +laindonleisure.co.uk, 1 lajijonencadebarbera.com, 1 lak-berlin.de, 1 lakarwebb.se, 1 @@ -15039,10 +15932,12 @@ lakatrop.com, 1 lakedavid.com.au, 1 lakefrontlittleelm.com, 1 lakehavasucityhomebuyerscredit.com, 1 +lakehavasucitynews.com, 1 lakehavasuhomebuyercredit.com, 1 lakehavasuhouserentals.com, 1 lakehavasuhouses.com, 1 lakehavasuwebsites.com, 1 +lakesherwoodelectrical.com, 1 lakewoodcomputerservices.com, 1 lakhesis.net, 1 lakonia.com.br, 1 @@ -15052,6 +15947,7 @@ laltroweb.it, 1 lalyre-corcelles.ch, 1 lamakat.de, 1 lamapoll.de, 1 +lamarieealhonneur.com, 1 lambauer.com, 1 lamboo.be, 1 lamiaposta.email, 1 @@ -15085,6 +15981,7 @@ languageterminal.com, 1 langworth.com, 1 lanna.io, 1 lannainnovation.com, 1 +lanonfire.com, 1 lanre.org, 1 lanroamer.de, 1 lansechensilu.com, 1 @@ -15115,6 +16012,7 @@ largescaleforums.com, 1 largeviewer.com, 1 lariscus.eu, 1 larptreff.de, 1 +larraz.es, 1 larrysalibra.com, 1 lars-ewald.com, 1 lars-mense.de, 1 @@ -15136,10 +16034,15 @@ laskas.pl, 1 lasnaves.com, 1 lasrecetasdeguada.com, 1 lasse-it.dk, 1 +lasseleegaard.com, 1 +lasseleegaard.dk, 1 +lasseleegaard.net, 1 +lasseleegaard.org, 1 lasst-uns-beten.de, 1 lastchancetraveler.com, 1 lastharo.com, 1 lastrada-minden.de, 1 +lastweekinaws.com, 1 lat.sk, 1 latabledebry.be, 1 latabledemontebello.com, 1 @@ -15222,6 +16125,7 @@ lbgconsultores.com, 1 lbihrhelpdesk.com, 1 lbs-logics.com, 1 lca-pv.de, 1 +lce-events.com, 1 lcht.ch, 0 lcti.biz, 1 ld-begunjscica.si, 1 @@ -15257,11 +16161,14 @@ leandre.cn, 1 leanplando.com, 1 leaodarodesia.com.br, 1 leap-it.be, 1 +leapandjump.co.uk, 1 +learn-smart.uk, 1 learnedhacker.com, 1 learnerdriving.com, 0 learnflakes.net, 1 learningis1.st, 1 learninglaw.com, 1 +learnpianogreece.com, 1 learnplayground.com, 1 learntube.cz, 1 leaseit24.com, 1 @@ -15269,6 +16176,7 @@ leaseit24.de, 1 leasit.at, 1 leasit.de, 1 leatherfurnitureexpo.com, 1 +leatherwood.nl, 1 leaversmith.com, 1 leavesofchangeweekly.org, 1 lebal.se, 1 @@ -15302,6 +16210,7 @@ leerliga.de, 1 leertipp.de, 1 leesilvey.com, 1 leet2.com, 1 +leetcode.com, 1 leetcode.net, 1 leetgamers.asia, 1 leetsaber.com, 1 @@ -15319,6 +16228,7 @@ legalcontrol.info, 1 legalrobot-uat.com, 1 legalrobot.com, 1 legaltip.eu, 1 +legatofmrc.fr, 1 legendary.camera, 1 legendesdechine.ch, 1 legendofkrystal.com, 0 @@ -15344,6 +16254,9 @@ leinfelder.in, 1 leipzig.photo, 1 leipziger-triathlon.de, 1 leisure-blog.com, 1 +leisure-supplies-show.co.uk, 1 +leition.com, 1 +leitionusercontent.com, 1 lejardindesmesanges.fr, 1 lel.ovh, 1 lelehei.com, 1 @@ -15356,6 +16269,7 @@ lemonrockbiketours.com, 1 lemuslimpost.com, 1 lence.net, 1 lengzzz.com, 1 +lenidh.de, 1 leninalbertop.com.ve, 1 lenkunz.me, 1 lenn1.de, 1 @@ -15368,6 +16282,7 @@ lenspirations.com, 1 lensual.space, 1 lenuagebauche.org, 1 lenyip.com, 1 +lenyip.me, 1 lenyip.works, 1 lenzw.de, 1 leoandpeto.com, 1 @@ -15375,6 +16290,7 @@ leola.cz, 1 leola.sk, 1 leolana.com, 1 leominstercu.com, 0 +leon-tech.com, 1 leon.net, 1 leonard.io, 0 leonardcamacho.me, 1 @@ -15433,15 +16349,18 @@ lesyndicat.info, 1 let-go.cc, 1 letemps.ch, 1 leticiagomeztagle.com, 1 +lets-bounce.com, 1 lets-go-acoustic.de, 1 lets-ktai.jp, 1 lets.ninja, 1 lets.nu, 1 +letsbounceuk.com, 1 letsencrypt-for-cpanel.com, 1 letsgame.nl, 1 letsgetchecked.com, 1 letsgetintouch.com, 1 letsgowhilewereyoung.com, 1 +letspartyrugby.co.uk, 1 letstalkcounseling.com, 1 letterbox-online.de, 1 letterdance.de, 1 @@ -15455,6 +16374,7 @@ leuthardtfamily.com, 1 levans.fr, 1 levanscatering.com, 1 levelcheat.com, 1 +leveluprails.com, 1 levelupwear.com, 1 levendwater.org, 1 levensbron.nl, 1 @@ -15538,6 +16458,7 @@ lichttraeumer.de, 1 lickmypussy.us, 1 lickthesalt.com, 1 lidavidm.me, 1 +lidel.org, 1 liderwalut.pl, 0 lidl-gewinnspiel.de, 1 lidl-holidays.com, 1 @@ -15561,6 +16482,7 @@ lifebetweenlives.com.au, 1 lifecism.com, 1 lifeinhex.com, 1 lifekiss.ru, 1 +lifemarque.co.uk, 1 lifematenutrition.com, 1 lifemstyle.com, 1 lifenexto.com, 1 @@ -15568,6 +16490,7 @@ lifeqa.net, 1 lifequotes-uk.co.uk, 1 lifesafety.com.br, 1 lifestyler.me, 1 +lifeventure.co.uk, 1 lifi.digital, 1 lifi.is, 1 liftie.info, 1 @@ -15580,6 +16503,7 @@ lights.co.uk, 1 lightspeed.com, 0 lighttp.com, 1 lightworkerandempathsupport.com, 1 +lignemalin.com, 1 lignenet.com, 1 lignoma.com, 1 ligonier.com, 1 @@ -15602,7 +16526,9 @@ lily-bearing.com, 1 lily-inn.com, 1 lilyfarmfreshskincare.com, 1 lilygreen.co.za, 1 +lilysbouncycastles.com, 1 limawi.io, 1 +limberg.me, 1 limeburst.net, 1 limeres.com, 1 limereslaw.com, 1 @@ -15617,6 +16543,7 @@ limules.ch, 1 limunana.com, 1 linan.blog, 1 lincdavis.com, 1 +lincsbouncycastlehire.co.uk, 1 linden.me, 1 lindeskar.se, 1 lindo.ru, 1 @@ -15685,6 +16612,8 @@ linx.net, 1 linxmind.eu, 1 linzgau.de, 1 lionlyrics.com, 1 +lionsdeal.com, 1 +lipartydepot.com, 1 lipex.com, 1 lipo.lol, 1 lipoabaltimore.org, 1 @@ -15700,6 +16629,7 @@ lirlandais.ch, 1 lirnberger.com, 1 lisamccorrie.com, 1 lisamortimore.com, 1 +lisburnhottubnbounce.co.uk, 1 lisieuxarquitetura.com.br, 1 liskgdt.net, 1 lislan.org.uk, 1 @@ -15726,9 +16656,13 @@ litsovet.com, 1 little-cake.com, 1 littledisney.ro, 1 littlefairy.no, 1 +littlejumpers.co.uk, 1 +littlelundgrenladies.com, 1 littlenina.nz, 0 littlepigcreek.com.au, 1 littlepincha.fr, 1 +littleprincessandmascotparties.co.uk, 1 +littlescallywagsplay.co.uk, 1 littleservice.cn, 1 littleswitch.co.jp, 1 littlewatcher.com, 1 @@ -15742,6 +16676,7 @@ liukang.tech, 1 liul.in, 1 liushuyu.tk, 1 liv3ly.com, 1 +livebetterwith.com, 1 livedesign.at, 1 livedesign24.de, 1 liveflightapp.com, 1 @@ -15774,6 +16709,7 @@ liyin.date, 1 liyinjia.com, 1 lizardsystems.com, 1 lizhi.io, 1 +lizzythepooch.com, 1 ljason.cn, 1 ljs.io, 1 lknw.de, 1 @@ -15812,6 +16748,7 @@ local360.net, 1 localbandz.com, 1 localbitcoins.com, 1 localblock.co.za, 1 +localbouncycastle.com, 1 localdecor.com.br, 1 localhorst.xyz, 1 localspot.pl, 1 @@ -15863,6 +16800,7 @@ login.sapo.pt, 1 login.ubuntu.com, 1 login.xero.com, 0 login.yahoo.com, 0 +logitank.net, 1 logitel.de, 1 logojoes.net, 1 logopaediereinhard.de, 1 @@ -15890,6 +16828,7 @@ lojavisamed.com.br, 1 lojix.com, 1 lojj.pt, 1 lokaal.org, 1 +lolcorp.pl, 1 lolcow.farm, 1 lolhax.org, 1 loli.net, 1 @@ -15901,6 +16840,7 @@ lolicon.info, 1 lolkot.ru, 1 lolpatrol.de, 1 lolpatrol.wtf, 1 +loma.ml, 1 lommyfleet.com, 1 lona.io, 1 lonal.com, 1 @@ -15934,6 +16874,7 @@ lookastic.ru, 1 lookatmysco.re, 1 lookyman.net, 1 loom.no, 1 +looneymooney.com, 1 loony.info, 1 loophost.com.br, 0 loopower.com, 1 @@ -15956,6 +16897,7 @@ loteks.de, 1 lottosonline.com, 1 lottospielen24.org, 1 lotw.de, 1 +lotz.li, 1 lou.lt, 1 louange-reconvilier.ch, 1 loucanfixit.com, 1 @@ -16037,6 +16979,7 @@ lubot.net, 0 luc-oberson.ch, 1 luca.swiss, 1 lucasantarella.com, 1 +lucascantor.com, 1 lucascodes.com, 1 lucasem.com, 1 lucasgaland.com, 1 @@ -16049,11 +16992,13 @@ lucidlight.de, 1 lucidlogs.com, 1 lucidoccult.com, 1 lucielavickova.com, 1 +luckycastles.co.uk, 1 luckystarfishing.com, 1 lucy.science, 1 lucyparsonslabs.com, 1 lucysan.net, 1 ludikovsky.name, 1 +ludovic-muller.fr, 1 ludwig.im, 1 ludwigpro.net, 1 luehne.de, 1 @@ -16092,8 +17037,10 @@ lukatz.de, 1 luke.ch, 1 lukeistschuld.de, 1 lukeng.net, 1 +lukesbouncycastlehire.com, 1 lukmanulhakim.id, 1 lumiere.com, 1 +luminancy.com, 1 lunafag.ru, 1 lunakit.org, 1 lunapps.com, 1 @@ -16122,6 +17069,7 @@ lusteniny.cz, 0 lustige-zitate.com, 1 lustin.fr, 1 lustrum.ch, 1 +lutizi.com, 1 lutoma.org, 1 luukdebruincv.nl, 1 luukklene.nl, 1 @@ -16157,6 +17105,7 @@ lynero.dk, 1 lyness.io, 1 lyngvaer.no, 1 lynkos.com, 1 +lynnlaytonnissanparts.com, 1 lynnmosher.com, 1 lynthium.com, 1 lynx.nl, 1 @@ -16176,10 +17125,13 @@ m-edmondson.co.uk, 1 m-generator.com, 1 m-idea.jp, 1 m-kleinert.de, 0 +m-mail.fr, 1 m-orthodontic.com, 1 m-plan.com, 1 +m-ses.fr, 1 m.facebook.com, 1 m.mail.ru, 1 +m.me, 1 m0t0k1ch1.com, 1 m132.eu, 1 m2epro.com, 1 @@ -16188,12 +17140,14 @@ m4570.xyz, 1 m4g.ru, 1 m4rcus.de, 1 ma-eir.nl, 1 +ma-musique.fr, 1 ma-plancha.ch, 1 ma2t.com, 1 maartenderaedemaeker.be, 1 maartenprovo.be, 1 maartenterpstra.xyz, 1 maartenvandekamp.nl, 1 +maaya.jp, 1 mabankonline.com, 1 mabulledu.net, 1 mac-i-tea.ch, 1 @@ -16213,8 +17167,10 @@ machbach.com, 1 machbach.net, 1 machetewp.com, 1 machikka.com, 0 +machineryhouse.com.au, 1 macht-elektro.de, 1 machtweb.de, 1 +maciespartyhire.co.uk, 1 macinyasha.net, 1 macker.io, 1 mackey7.net, 1 @@ -16230,9 +17186,11 @@ maconnerie-dcs.ch, 1 macosxfilerecovery.com, 1 macoun.de, 1 macstore.pe, 1 +mactools.com.co, 1 macustar.eu, 1 madae.nl, 1 madbin.com, 1 +madbouncycastles.co.uk, 1 madcatdesign.de, 1 maddi.biz, 1 made-in-earth.co.jp, 1 @@ -16284,6 +17242,8 @@ magentapinkinteriors.co.uk, 1 magi.systems, 1 magicball.co, 1 magicbroccoli.de, 0 +magicdaysomagh.co.uk, 1 +magickmoments.co.uk, 1 magiclen.org, 1 magicspaceninjapirates.de, 0 magictable.com, 1 @@ -16345,6 +17305,7 @@ majkyto.cz, 1 makaleci.com, 1 makedin.net, 1 makeit-so.de, 1 +makem-bounce.co.uk, 1 makemejob.com, 1 makenaiyo-fx.com, 1 makeuplove.nl, 1 @@ -16367,11 +17328,12 @@ malgraph.net, 1 maliar.fr, 1 malibubeachrecoverycenter.com, 1 malibuelectrical.com, 1 +malik.id, 1 malikussa.id, 1 +malikussaid.com, 1 malinator.net, 0 malinheadview.ie, 1 maliskovik.si, 1 -maljaars-fotografie.nl, 1 malkaso.com.ua, 1 mall.cz, 1 mall.hr, 1 @@ -16390,6 +17352,7 @@ malvy.kiev.ua, 1 malware.watch, 1 malwarekillers.com, 1 maly.cz, 1 +malyshata.com, 1 malysvet.net, 1 mamacobaby.com, 1 mamadea.be, 1 @@ -16412,10 +17375,12 @@ managementfeedback.com, 1 manager-efficacement.com, 1 manager.linode.com, 0 managewp.org, 1 +manalu.cz, 1 manatees.net, 1 manav-it.de, 1 manavgabhawala.com, 1 mandala-ausmalbilder.de, 1 +mandcbouncycastlehire.co.uk, 1 mandm.servebeer.com, 1 manesht.ir, 1 manfredgruber.net, 1 @@ -16424,6 +17389,7 @@ mangaristica.com, 1 mangazuki.co, 1 manhattanchoralensemble.org, 1 manhole.club, 1 +manicbouncycastles.co.uk, 1 manicode.com, 1 maniorpedi.com, 1 manipil.ch, 1 @@ -16452,6 +17418,7 @@ manuel-schefczyk.de, 1 manueldopheide.com, 1 manueli.de, 1 manufacturing.gov, 1 +manuscript.com, 1 manutd.org.np, 1 manuth.life, 1 manutrol.com.br, 1 @@ -16497,6 +17464,7 @@ marciaimportados.com.br, 1 marcianoandtopazio.com, 1 marco-kretz.de, 1 marco-polo-reisen.com, 1 +marcocasoni.com, 1 marcohager.de, 1 marcoherten.com, 1 marcoslater.com, 1 @@ -16513,6 +17481,7 @@ margotlondon.co.uk, 1 mariacristinadoces.com.br, 1 mariage-photo.ch, 1 marianatherapy.com, 1 +marianhoenscheid.de, 1 mariannenan.nl, 1 marianwehlus.de, 1 mariaolesen.dk, 1 @@ -16556,6 +17525,7 @@ marketizare.ro, 1 marketnsight.com, 1 markido.com, 1 markitzeroday.com, 1 +marko-fenster24.de, 1 markoh.co.uk, 1 markom.rs, 1 markow.io, 1 @@ -16564,6 +17534,7 @@ markrego.com, 1 markri.nl, 0 markridgwell.com, 1 markridgwellcom.appspot.com, 1 +markscastles.co.uk, 1 marksouthall.com, 1 markspres.org, 1 markt-heiligenstadt.de, 0 @@ -16595,10 +17566,12 @@ marrickvilleapartments.com.au, 1 marsanvet.com, 1 marsatapp.com, 1 marsble.com, 1 +marshallscastles.com, 1 marshmallow.co, 1 martelange.ovh, 1 martensmxservice.nl, 1 marti201.ga, 1 +martide.com, 1 martiestrimsalon.nl, 1 martin-arend.de, 1 martin-mattel.com, 1 @@ -16632,6 +17605,7 @@ massage4u.net, 1 massagecupping.com, 1 massdrop.com, 1 masse.org, 1 +massflix.com, 1 masshiro.blog, 1 massivum.de, 0 massoni.pl, 1 @@ -16668,6 +17642,7 @@ mastodon.rocks, 1 mastodon.top, 1 mat99.dk, 1 matanz.de, 1 +matarrosabierzo.com, 1 matatabimix.com, 1 match.audio, 1 matcha-iga.jp, 1 @@ -16716,6 +17691,7 @@ matthey.nl, 1 matthi.coffee, 1 matthias-muenzner.de, 1 matthiasadler.info, 1 +matthiasott.com, 1 matthiasschwab.de, 1 matthiasweiler.de, 1 matthijssen.info, 1 @@ -16777,6 +17753,8 @@ maybeul.com, 1 maydex.info, 1 mayerbrownllz.com, 1 maynardnetworks.com, 0 +mayomarquees.com, 1 +mayopartyhire.com, 1 mayoristassexshop.com, 1 maypolevilla.co.uk, 1 mayrhofer.eu.org, 1 @@ -16789,6 +17767,7 @@ mazurlabs.tk, 1 mazzotta.me, 1 mb-is.info, 1 mbaestlein.de, 1 +mbainflatables.co.uk, 1 mbardot.com, 1 mbasic.facebook.com, 0 mbcars.be, 1 @@ -16799,6 +17778,7 @@ mbinf.de, 0 mbinformatik.de, 0 mbits.solutions, 1 mblankhorst.nl, 1 +mble.mg, 1 mbp.banking.co.at, 0 mbr-net.de, 1 mbrooks.info, 1 @@ -16814,6 +17794,7 @@ mcb-bank.com, 1 mccordworks.com, 1 mccrackon.com, 1 mcdanieldevelopmentservices.com, 1 +mcdermottautomotive.com, 1 mcdona1d.me, 1 mcdonalds.be, 1 mcdonalds.design, 1 @@ -16836,12 +17817,14 @@ mckinley.school, 1 mckinley1.com, 1 mckinleytk.com, 1 mcl.gg, 1 +mclinflatables.co.uk, 1 mcmillanskiclub.com.au, 1 mcneill.io, 1 mcnext.net, 1 mcpart.land, 1 mcrn.jp, 1 mcsa-usa.org, 1 +mcsinflatables.co.uk, 1 mcsniper.co, 1 mcsnovatamabayan.com, 1 mctherealm.net, 1 @@ -16850,6 +17833,7 @@ mcynews.com, 1 mcyukon.com, 1 md5file.com, 1 md5hashing.net, 1 +mdbouncycastlehirelondon.co.uk, 1 mdcloudpracticesolutions.com, 1 mdcloudps.com, 1 mdek.at, 1 @@ -16858,11 +17842,13 @@ mdf-bis.com, 1 mdkr.nl, 1 mdma.net, 1 mdmed.clinic, 1 +mdoering.de, 1 mdosch.de, 1 mdpraha.cz, 1 mdsave.com, 1 mdwftw.com, 1 mdx.no, 1 +mdxdave.de, 1 mdxn.org, 1 me-center.com, 1 me-dc.com, 1 @@ -16870,7 +17856,6 @@ me-groups.com, 1 me.net.nz, 1 meadowviewfarms.org, 1 mealgoo.com, 1 -mealz.com, 1 meanevo.com, 0 meany.xyz, 1 meap.xyz, 1 @@ -16913,6 +17898,7 @@ medic-world.com, 1 medicalcountermeasures.gov, 1 medicinesfast.com, 0 medicinia.com.br, 1 +medicinskavranje.edu.rs, 1 medicocompetente.it, 1 medicoresponde.com.br, 1 medifab.online, 1 @@ -16932,6 +17918,7 @@ medtankers.management, 1 medtehnika.ua, 1 medusa.wtf, 1 meduza.io, 1 +medwaybouncycastlehire.co.uk, 1 medy-me.com, 1 medyotan.ga, 1 meedoenhartvanwestbrabant.nl, 1 @@ -16946,14 +17933,20 @@ meetingmanager.ovh, 1 meetmibaby.co.uk, 1 meetmygoods.com, 1 meeusen-usedcars.be, 1 +meeztertom.nl, 1 +meg-a-bounce.co.uk, 1 mega-feeling.de, 1 mega.co.nz, 1 mega.nz, 1 mega.online, 1 megablogging.org, 1 +megabounce.co.uk, 1 +megabounceni.co.uk, 1 +megabouncingcastles.com, 1 megadrol.com, 1 megaflowers.ru, 1 megagifs.de, 1 +megainflatables.co.uk, 1 megamarkey.de, 1 megamisja.pl, 1 meganandmarc.us, 1 @@ -16965,6 +17958,7 @@ megaplonk.com, 1 megasslstore.com, 1 megaxchange.com, 1 megumico.net, 1 +mehalick.com, 1 mehhh.xyz, 1 mehmetakif.edu.tr, 1 mehmetince.net, 1 @@ -16977,6 +17971,7 @@ meikan.moe, 1 meilleur.info, 1 mein-muehlhausen.bayern, 1 mein-webportal.de, 1 +meinbetriebsrat24.de, 1 meincenter-meinemeinung.de, 1 meincoach.at, 1 meine-email-im.net, 1 @@ -17012,6 +18007,7 @@ melitopol.co.ua, 1 melnessgroup.com, 1 melnikov.ch, 1 melodic.com.au, 1 +melodiouscode.net, 1 melodrom.de, 1 melody-lyrics.com, 1 melonstudios.net, 1 @@ -17033,12 +18029,14 @@ memfrob.org, 1 memiux.com, 1 memo-linux.com, 1 memoire-resistance-ariege.fr, 1 +memorycards.ie, 1 memoryex.net, 1 memorygame.io, 1 menanwc.org, 1 menaraannonces.com, 1 menchez.me, 1 menden.com, 1 +mendipbouncycastles.co.uk, 1 mendy.jp, 1 menielias.com, 1 menole.com, 1 @@ -17106,6 +18104,7 @@ metachris.com, 1 metacoda.com, 1 metacode.biz, 1 metadatawiki.com, 1 +metadistribution.com, 1 metaether.net, 1 metalsculpture.co.uk, 1 metalu.ch, 1 @@ -17127,11 +18126,13 @@ meteosmit.it, 1 meterhost.com, 1 methamphetamine.co.uk, 1 methylone.com, 1 +metikam.pl, 1 metin2sepeti.com, 1 metrix-money-ptc.com, 1 metrix.design, 1 metroairvirtual.com, 1 metrobriefs.com, 1 +metrolush.com, 1 metronaut.de, 1 metropop.ch, 1 metsasta.com, 1 @@ -17174,6 +18175,7 @@ miaoubox.com, 1 miaowo.org, 1 miasarafina.de, 1 miboulot.com, 1 +micado-software.com, 1 micaiahparker.com, 1 micalodeal.ch, 1 micasamgmt.com, 1 @@ -17191,6 +18193,7 @@ michaelleibundgut.com, 1 michaelpfrommer.de, 1 michaelpfrommer.pub, 1 michaelrigart.be, 1 +michaelschubert.com, 1 michaelsulzer.com, 1 michaelsulzer.eu, 1 michaeltaboada.me, 1 @@ -17221,11 +18224,15 @@ microco.sm, 1 microcomploja.com.br, 1 microdesic.com, 1 microdots.de, 1 +microlinks.org, 1 microlog.org, 1 microsoftaffiliates.azurewebsites.net, 1 microvb.com, 1 midair.io, 1 midlandgate.de, 1 +midlandleisuresales.co.uk, 1 +midlandsfundays.co.uk, 1 +midlandsphotobooths.co.uk, 1 midlgx.com, 1 midnight-visions.de, 1 midnightmechanism.com, 1 @@ -17266,6 +18273,7 @@ mikegarnett.co.uk, 1 mikegerwitz.com, 1 mikehamburg.com, 1 mikek.work, 1 +mikerichards.photography, 1 mikes.tk, 1 miketabor.com, 1 miketheuer.com, 1 @@ -17354,11 +18362,13 @@ minhanossasenhora.com.br, 1 mini2.fi, 1 minigames.com, 1 minigolf-reisinger.com, 1 +minigolfandgames.co.uk, 1 minikidz.es, 1 minikneet.com, 1 minilions.fr, 1 minimaliston.com, 1 minimaltimer.com, 1 +minimayhemsoftplay.co.uk, 1 minimbah.com.au, 1 minimvc.com, 1 minipainting.net, 1 @@ -17376,6 +18386,7 @@ minobar.com, 1 minorshadows.net, 1 minpingvin.dk, 1 minschuns.ch, 1 +mintclass.com, 1 mintea-noua.ro, 1 minto.cc, 1 mintosherbs.com, 1 @@ -17408,6 +18419,7 @@ misconfigured.io, 1 miscreant.me, 1 misericordiasegrate.org, 1 misgluteosperfectos.com, 1 +mishkovskyi.net, 1 miskatonic.org, 1 misoji-resist.com, 1 misrv.com, 1 @@ -17470,6 +18482,7 @@ mizumax.me, 1 mj420.com, 1 mjacobson.net, 1 mjanja.ch, 1 +mjasm.org, 1 mjec.net, 1 mjhsc.nl, 1 mjlaurindo.pt, 1 @@ -17478,6 +18491,8 @@ mk89.de, 1 mkaciuba.com, 1 mkakh.com, 1 mkakh.xyz, 1 +mkbouncycastles.co.uk, 1 +mkbouncyhire.co.uk, 1 mkcert.org, 1 mkd.mk, 1 mkes.com, 1 @@ -17608,6 +18623,7 @@ mojapraca.sk, 1 mojavenissanofbarstowparts.com, 1 mojefedora.cz, 1 mojefilmy.xyz, 1 +mojilitygroup.com, 1 mojizuri.jp, 1 mojnet.eu, 1 mojnet.net, 1 @@ -17641,6 +18657,7 @@ monbudget.org, 1 moncoach.ch, 1 mondedie.fr, 1 mondial-movers.nl, 1 +mondo-it.ch, 1 moneychangersoftware.com, 1 moneygo.se, 1 moneyhouse.de, 1 @@ -17652,6 +18669,7 @@ moniquedekermadec.com, 1 moniquemunhoz.com.br, 1 monitman.solutions, 1 monitori.ng, 1 +monitoring.kalisz.pl, 1 monitzer.com, 1 monix.io, 1 monkeydust.net, 1 @@ -17661,6 +18679,7 @@ monnyonle.hu, 1 monobank.no, 1 monochrometoys.com, 1 monodukuri.com, 1 +monokoo.com, 1 monolithapps.com, 1 monolithinteractive.com, 1 monoseis-monotica.gr, 1 @@ -17670,6 +18689,7 @@ monpermisvoiture.com, 1 monpetitforfait.com, 1 monpetitmobile.com, 1 monsieursavon.ch, 1 +monstermashentertainments.co.uk, 1 montage-kaika.de, 1 montagne-tendance.ch, 1 montanana.com, 1 @@ -17698,6 +18718,8 @@ moonrhythm.info, 1 moonrhythm.io, 1 moonshyne.org, 1 moonvpn.org, 1 +moonysbouncycastles.co.uk, 1 +moorfunevents.co.uk, 1 moorparkelectrical.com, 1 mooselook.de, 1 moovablestorage.com, 1 @@ -17723,9 +18745,11 @@ morenci.ch, 1 morepay.cn, 1 moreserviceleads.com, 1 moresw.com, 1 +morethandigital.info, 1 morfitronik.pl, 1 morganino.eu, 1 morganino.it, 1 +morgansleisure.co.uk, 1 moritz-baestlein.de, 1 moritztremmel.de, 1 moriz.de, 1 @@ -17749,6 +18773,7 @@ mostlyharmless.at, 1 mostlyinfinite.com, 1 mostlyoverhead.com, 1 motd.ch, 1 +motherboard.services, 1 mothereff.in, 0 motionless.nl, 1 motohell.com, 1 @@ -17763,6 +18788,7 @@ motorring.ru, 1 motorsplus.com, 1 motoryachtclub-radolfzell.de, 1 motosikletevi.com, 1 +motostorie.blog, 1 motransportinfo.com, 1 mottomortgage.com, 1 moube.fr, 1 @@ -17789,6 +18815,7 @@ movieguys.org, 1 movienang.com, 1 moviepilot.com, 1 movil.uno, 1 +moving-pixtures.de, 1 movinglogistics.nl, 0 movingoklahoma.org, 1 movingtohttps.com, 1 @@ -17804,6 +18831,7 @@ mozilla.cz, 1 mozillians.org, 1 mozzez.de, 1 mozzilla.cz, 1 +mp3donusturucu.net, 1 mp3gratuiti.com, 1 mpc-hc.org, 1 mpcompliance.com, 1 @@ -17830,9 +18858,14 @@ mr-nachhilfe.de, 1 mr-wolf.nl, 1 mrafrohead.com, 1 mrbmafrica.com, 1 +mrbounce.com, 1 +mrbouncescrazycastles.co.uk, 1 +mrbouncycastle.com, 1 mrca-sharp.com, 1 +mrcoolevents.com, 1 mrd.ninja, 1 mrdayman.com, 1 +mrdleisure.co.uk, 1 mremallin.ca, 1 mrevolution.eu, 1 mrhee.com, 1 @@ -17844,6 +18877,8 @@ mrksk.com, 1 mrleonardo.com, 1 mrliu.me, 1 mrmoregame.de, 1 +mrnh.de, 1 +mrnh.tk, 1 mrpropop.com, 1 mrs-labo.jp, 1 mrsbairds.com, 1 @@ -17863,8 +18898,11 @@ msebera.cz, 1 msgallery.tk, 1 msh100.uk, 1 mshemailmarketer.com.au, 1 +msi-zlin.cz, 1 msiegmund.com, 1 msmails.de, 1 +msnr.net, 1 +msp66.de, 1 mspnocsupport.com, 1 mssys.de, 1 mstdn.blue, 1 @@ -17908,6 +18946,7 @@ muahahahaha.co.uk, 1 mubiflex.nl, 1 muchohentai.com, 1 muckingabout.eu, 1 +mucmail.de, 1 mudcrab.us, 0 muehlemann.net, 1 muellapp.com, 1 @@ -17924,6 +18963,7 @@ mulaccosmetics.com, 1 mulaisehat.com, 1 mulej.net, 1 mulheres18.com, 1 +mulherportuguesa.com, 1 muling.lu, 1 mullens-usedcars.be, 1 multi-vpn.biz, 1 @@ -17932,6 +18972,7 @@ multibomasm.com.br, 1 multicomhost.com, 1 multigamecard.com, 1 multigeist.de, 1 +multikalender.de, 1 multimail.work, 1 multimarques.com, 1 multimedia-pool.com, 1 @@ -18018,11 +19059,13 @@ mutantmonkey.info, 1 mutantmonkey.sexy, 1 mutuals.cool, 1 mutuelle.fr, 1 +muusika.fun, 1 muusikoiden.net, 1 muwatenraqamy.org, 1 muzeumkomiksu.eu, 1 muzi.cz, 1 mv-wohnen.de, 1 +mvandek.nl, 1 mvbits.com, 1 mvnet.com.br, 1 mvno.io, 1 @@ -18040,6 +19083,7 @@ mx.search.yahoo.com, 0 mx5international.com, 1 mxawei.cn, 1 mxihan.xyz, 1 +mxlife.org, 1 mxp.tw, 1 my-cdn.de, 1 my-contract.ch, 1 @@ -18134,6 +19178,7 @@ myhealthreviews.com, 1 myhostname.net, 1 myimds.com, 1 myimmitracker.com, 1 +myjumparoo.co.uk, 1 mykeepsake.xyz, 0 myki.co, 1 mykontool.de, 1 @@ -18155,6 +19200,7 @@ mymp3singer.co, 1 mymp3singer.net, 1 myms.eu, 1 mymsr.de, 1 +mymun.net, 1 mymx.lu, 1 myna.go.jp, 1 myndcommunication.com, 1 @@ -18182,6 +19228,8 @@ myownconference.lv, 1 myownconference.pl, 1 myownconference.pt, 1 myownconference.ru, 1 +myowndisk.com, 1 +myowndisk.net, 1 myownwebinar.com, 1 mypanier.com, 1 mypaperwriter.com, 1 @@ -18260,15 +19308,18 @@ myworkinfo.com, 0 myworth.com.au, 1 myzina.cz, 0 mz-mz.net, 1 +mzh.io, 1 mziulu.me, 0 mzlog.win, 1 mzorn.photography, 1 +n-kanazawa.jp, 1 n-m.lu, 1 n-pix.com, 0 n-soft.info, 1 n-un.de, 1 n0099.cf, 0 n0paste.tk, 0 +n26.com, 1 n2servers.com, 1 n3twork.net, 1 n4v.eu, 1 @@ -18310,6 +19361,7 @@ nakandya.com, 1 nakanishi-paint.com, 1 nakedalarmclock.me, 1 nakedfacts.co.uk, 0 +nakedtruthbeauty.com, 1 nakliyatsirketi.biz.tr, 1 nako.no, 1 nalao-company.com, 1 @@ -18326,6 +19378,7 @@ naminam.de, 1 namrs.net, 1 namu.moe, 1 namu.wiki, 1 +nan.ci, 1 nanami.moe, 1 nanarose.ch, 1 nanch.com, 1 @@ -18334,6 +19387,7 @@ nanfangstone.com, 1 nankiseamansclub.com, 1 nanogi.ga, 1 nanotechnologist.com, 1 +nanovolt.nl, 1 nanpuyue.com, 1 nanubo.com, 1 nanubo.de, 1 @@ -18346,6 +19400,7 @@ napolinissanctparts.com, 1 narach.com, 1 narada.com.ua, 1 naralogics.com, 1 +narazaka.net, 1 narfation.org, 1 nargele.eu, 1 nargileh.nl, 1 @@ -18357,6 +19412,7 @@ narodsovety.ru, 1 naroska.name, 1 narrativasdigitais.pt, 1 narthollis.net, 1 +narviz.com, 1 nasarawanewsonline.com, 1 nasbnation.com, 1 nascher.org, 0 @@ -18392,6 +19448,7 @@ natsumihoshino.com, 1 natur-udvar.hu, 1 naturalcommission.com, 1 naturalspacesdomes.com, 1 +naturaum.de, 1 natureflo.net, 1 naturesharvestbread.com, 1 naturesorganichaven.com, 1 @@ -18479,6 +19536,7 @@ nbrown.us, 1 nbtparse.org, 1 nbur.co.uk, 1 nc99.co, 1 +ncamarquee.co.uk, 1 ncands.net, 1 ncaq.net, 1 ncconsumer.org, 1 @@ -18497,6 +19555,7 @@ ndcpolipak.com, 1 ndeoffshore.com, 1 nder.be, 1 ndmath.club, 1 +ndpbrn-research.org, 1 ndtblog.com, 1 ndy.sex, 1 ne-on.org, 1 @@ -18533,7 +19592,6 @@ neet-investor.biz, 1 nefertitis.cz, 1 neftebitum-kngk.ru, 1 neg9.org, 0 -negai.moe, 1 negativecurvature.net, 1 neglecteddiseases.gov, 1 negraelinda.com, 1 @@ -18541,6 +19599,7 @@ nehoupat.cz, 1 neillans.co.uk, 1 neillans.com, 1 neilwynne.com, 1 +neio.uk, 1 nejnamc.org, 1 neko-nyan-nuko.com, 1 neko-nyan.org, 1 @@ -18704,6 +19763,8 @@ newaccess.ch, 1 newantiagingcreams.com, 1 newbietech.cn, 1 newbownerton.xyz, 1 +newburybouncycastles.co.uk, 1 +newburyparkelectrical.com, 1 newcitygas.ca, 1 newcityinfo.ch, 1 newcityinfo.info, 1 @@ -18719,12 +19780,14 @@ newizv.ru, 1 newjianzhi.com, 1 newknd.com, 1 newline.online, 1 +newmarketbouncycastlehire.co.uk, 1 newmed.com.br, 1 newmediaone.net, 1 newmovements.net, 1 newodesign.com, 1 newpathintegratedtherapy.com, 1 news47ell.com, 1 +newsa2.com, 1 newserumforskin.com, 1 newsmotor.info, 1 newspsychology.com, 1 @@ -18768,6 +19831,7 @@ nezrouge-geneve.ch, 1 nf9q.com, 1 nfe-elektro.de, 1 nfhome.be, 1 +nfir.nl, 1 nfl.dedyn.io, 1 nfl.duckdns.org, 1 nfls.io, 1 @@ -18887,7 +19951,6 @@ nikklassen.ca, 1 nikksno.io, 1 niklas.pw, 1 niklasbabel.com, 1 -nikobradshaw.com, 1 nikolaichik.photo, 1 nikolasbradshaw.com, 1 nikolasgrottendieck.com, 1 @@ -18896,6 +19959,7 @@ nikz.in, 1 nil.gs, 1 nilrem.org, 1 nimeshjm.com, 1 +ninaforever.com, 1 ninarinaldi.com.br, 1 ninaundandre.de, 1 ninchat.com, 1 @@ -18938,6 +20002,7 @@ nix.org.ua, 0 nixonlibrary.gov, 1 niyawe.de, 1 nja.id.au, 1 +njguardtraining.com, 1 njpjanssen.nl, 1 nkadvertising.online, 1 nkb.in.th, 1 @@ -18963,6 +20028,7 @@ no.search.yahoo.com, 0 noagendahr.org, 1 nobleparkapartments.com.au, 1 nobly.de, 1 +noc.org, 1 noc.wang, 1 nocit.dk, 1 nocs.cn, 1 @@ -18980,6 +20046,7 @@ nodesturut.cl, 1 nodum.io, 1 noeatnosleep.me, 1 noedidacticos.com, 1 +noegoph.com, 1 noellabo.jp, 1 noemax.com, 1 noesberts-weidmoos.de, 1 @@ -19013,14 +20080,16 @@ noncombatant.org, 1 noob-box.net, 0 noobunbox.net, 1 noodles.net.nz, 1 +noodleyum.com, 1 noodplan.co.za, 1 noodweer.be, 1 +noon-entertainments.com, 1 noop.ch, 1 noordsee.de, 1 noorsolidarity.com, 1 nootropic.com, 1 -nootropicsource.com, 1 nopaste.xyz, 1 +nopaynocure.com, 1 nord-sud.be, 1 nordakademie.de, 1 nordic-survival.de, 1 @@ -19037,6 +20106,7 @@ normaculta.com.br, 1 normalady.com, 1 norman-preusser-gmbh.de, 1 normanbauer.com, 1 +normandgascon.com, 1 normankranich.de, 1 norrkemi.se, 1 norrliden.de, 1 @@ -19045,14 +20115,18 @@ north.supply, 1 northatlantalaw.net, 1 northbrisbaneapartments.com.au, 1 northcountykiaparts.com, 1 +northdevonbouncycastles.co.uk, 1 northeastcdc.org, 1 +northeastrodeo.co.uk, 1 northernhamsterclub.com, 1 northernmuscle.ca, 1 +northernselfstorage.co.za, 1 northfieldyarn.com, 1 northpennvwparts.com, 1 northpole.dance, 1 northridgeelectrical.com, 1 northumbriagames.co.uk, 1 +northwest-events.co.uk, 1 northwoodsfish.com, 1 nos-medias.fr, 1 nos-oignons.net, 1 @@ -19103,10 +20177,12 @@ nova-wd.org.uk, 1 nova.live, 1 novabench.com, 1 novacoast.com, 0 +novadermis.es, 1 novafreixo.pt, 1 novaopcaofestas.com.br, 1 novascan.net, 1 novawave.ca, 1 +novecity.com, 1 novelabs.eu, 1 novelfeed.com, 1 novelinglife.net, 1 @@ -19255,6 +20331,7 @@ o3wallet.com, 1 o6asan.com, 1 oaic.gov.au, 1 oakington.info, 1 +oakparkelectrical.com, 1 oakslighting.co.uk, 1 oasis-conference.org.nz, 1 oasisdabeleza.com.br, 1 @@ -19283,6 +20360,7 @@ observatory.se, 1 obsidianirc.net, 1 obsproject.com, 1 obtima.org, 1 +obud.cz, 1 obyvateleceska.cz, 1 oc-minecraft.com, 1 oc-sa.ch, 1 @@ -19307,6 +20385,7 @@ ocolere.ch, 1 ocotg.com, 1 ocrn.nl, 1 ocsigroup.fr, 1 +ocsr.nl, 1 octal.es, 1 octanio.com, 1 octav.name, 0 @@ -19320,6 +20399,7 @@ octosys.net, 1 octosys.org, 1 octosys.ru, 1 octothorpe.club, 1 +octothorpe.ninja, 1 oddnumber.ca, 1 oddsandevens.ca, 1 oddsandevensbookkeeping.ca, 1 @@ -19351,6 +20431,7 @@ offgames.io, 1 offgames.pro, 1 office-de-tourisme.net, 0 office-ruru.com, 1 +officefundays.co.uk, 1 officemovepro.com, 1 officeprint.co.th, 1 officiants.wedding, 0 @@ -19368,6 +20449,7 @@ ogis.gov, 1 ogkw.de, 1 oglen.ca, 1 ogocare.com, 1 +ogrodywstudniach.pl, 1 oguya.ch, 1 oh14.de, 1 ohadsoft.com, 1 @@ -19376,12 +20458,14 @@ ohayosoro.me, 1 ohchouette.com, 1 ohd.dk, 1 oheila.com, 1 +ohhdeertrade.com, 1 ohiohealthfortune100.com, 1 ohlmeier.com, 0 ohlmeier.net, 0 ohlmeier.org, 0 ohnemusik.com, 1 ohreally.de, 1 +ohsohairy.co.uk, 1 oilpaintingsonly.com, 1 oinky.ddns.net, 1 ojaioliveoil.com, 1 @@ -19398,6 +20482,7 @@ okay.coffee, 1 okaz.de, 1 okburrito.com, 1 okchicas.com, 1 +okchousebuyer.com, 1 okeeferanch.ca, 1 okhrana.agency, 1 okin-jp.net, 1 @@ -19412,6 +20497,8 @@ okusiassociates.com, 1 olasouris.com, 1 olback.net, 1 oldandyounglesbians.us, 1 +oldbrookinflatables.co.uk, 1 +oldbrookmarqueehire.co.uk, 1 oldenglishsheepdog.com.br, 1 oldking.net, 1 oldnews.news, 1 @@ -19423,6 +20510,7 @@ oleodecopayba.com.br, 1 olgiati.org, 1 olightstore.com, 1 olightstore.ro, 1 +oliode.tk, 1 oliveoiltest.com, 1 oliveoiltimes.com, 1 oliveraiedelabastideblanche.fr, 1 @@ -19430,6 +20518,7 @@ oliverfaircliff.com, 1 olivernaraki.com, 1 oliverniebuhr.de, 1 oliverspringer.eu, 1 +olivierberardphotographe.com, 1 olivierlemoal.fr, 1 olivierpieters.be, 1 olivlabs.com, 1 @@ -19454,6 +20543,7 @@ omertabeyond.com, 1 omertabeyond.net, 1 ometepeislandinfo.com, 1 omf.link, 1 +omgbouncycastlehire.co.uk, 1 omi-news.fr, 1 omifind.com, 1 omitech.co.uk, 1 @@ -19471,10 +20561,13 @@ omronwellness.com, 1 omsdieppe.fr, 1 on-te.ch, 1 on-tech.co.uk, 1 +ona.io, 1 onaboat.se, 1 onarto.com, 1 +onceuponarainbow.co.uk, 1 oncf.asso.fr, 1 oncodedesign.com, 1 +ond-inc.com, 1 ondrej.org, 1 one---line.com, 1 one-s.co.jp, 1 @@ -19497,6 +20590,7 @@ onemoonmedia.de, 1 oneononeonone.de, 1 oneononeonone.tv, 1 onestepfootcare.com, 1 +onestopcastles.co.uk, 1 onetech.it, 1 onetwentyseven001.com, 1 oneway.ga, 1 @@ -19534,7 +20628,7 @@ onlinemarketingtraining.co.uk, 1 onlinepokerspelen.be, 1 onlinerollout.de, 1 onlinestoreninjas.com, 1 -onlineth.com, 1 +onlineth.com, 0 onlinetravelmoney.co.uk, 1 onlineweblearning.com, 1 onlylebanon.net, 1 @@ -19567,6 +20661,8 @@ onwie.com, 1 onwie.fr, 1 onysix.net, 1 onyxfireinc.com, 1 +oo.edu.rs, 1 +oodlessoftplay.co.uk, 1 ooeste.com, 1 oogami.name, 1 oogartsennet.nl, 1 @@ -19599,6 +20695,7 @@ opencluster.at, 1 openconcept.no, 1 openconnect.com.au, 1 opendataincubator.eu, 1 +opendecide.com, 1 openevic.info, 1 openfir.st, 1 openfitapi-falke.azurewebsites.net, 1 @@ -19673,6 +20770,7 @@ opus-codium.fr, 1 orang-utans.com, 1 orangecomputers.com, 1 orangefinanse.com.pl, 1 +orangejetpack.com, 1 orangenbaum.at, 1 oranges.tokyo, 1 orangetravel.eu, 1 @@ -19712,8 +20810,10 @@ originalniknihy.cz, 1 orimex-mebel.ru, 1 oriongames.eu, 1 orkestar-krizevci.hr, 1 +orlandoprojects.com, 1 orleika.io, 1 orlives.de, 0 +ormer.nl, 1 orovillelaw.com, 1 orro.ro, 1 orrs.de, 1 @@ -19756,6 +20856,7 @@ ostrov8.com, 1 osusume-houhou.com, 1 oswalds.co.uk, 1 oswaldsmillaudio.com, 1 +oswbouncycastles.co.uk, 1 osx86spain.com, 1 osxentwicklerforum.de, 1 oszri.hu, 1 @@ -19835,7 +20936,6 @@ ownspec.com, 1 oxanababy.com, 1 oxborrow.ca, 1 oxelie.com, 1 -oxro.co, 1 oxygaming.com, 1 oxymc.com, 1 oxynux.xyz, 1 @@ -19854,6 +20954,8 @@ ozvolvo.org, 1 p-pc.de, 1 p-s-b.com, 1 p1984.nl, 0 +p1ratrulezzz.me, 1 +p22.co, 1 p3ter.fr, 1 p4chivtac.com, 1 pa-w.de, 1 @@ -19864,6 +20966,7 @@ pabuzo.vn, 1 pacco.com.br, 1 pace.car, 1 pacelink.de, 1 +pacificpalisadeselectrical.com, 1 pacifictilkin-occasions.be, 1 packagingproject.management, 1 packagist.org, 0 @@ -19979,12 +21082,14 @@ papayame.com, 1 papayapythons.com, 1 paper-republic.org, 1 paperhaven.com.au, 1 +paperhoney.by, 1 papermasters.com, 1 papersmart.net, 1 papertracker.net, 1 paperturn.com, 1 paperwork.co.za, 1 paperwritinghelp.net, 1 +paprikas.fr, 1 paraborsa.net, 1 parachute70.com, 1 paradiesgirls.ch, 1 @@ -20013,6 +21118,7 @@ pardnoy.com, 1 parentheseardenne.be, 1 parentinterview.com, 1 parentsintouch.co.uk, 1 +parfum-baza.ru, 1 pariga.co.uk, 1 paris-cyber.fr, 1 parisescortgirls.com, 1 @@ -20023,11 +21129,13 @@ parisfranceparking.nl, 1 parishome.jp, 1 parkingpoint.co.uk, 1 parksubaruoemparts.com, 1 +parkviewmotorcompany.com, 1 parlamento.gub.uy, 1 parleamonluc.fr, 1 parleu2016.nl, 1 parodybit.net, 1 parolu.io, 1 +parquettista.roma.it, 1 parsemail.org, 1 parser.nu, 1 partecipa.tn.it, 1 @@ -20043,16 +21151,30 @@ partou.de, 1 partridge.tech, 1 parts4phone.com, 1 partsestore.com, 1 +party-and-play.co.uk, 1 party-calendar.net, 1 party-kneipe-bar.com, 1 +party-time-inflatables-durham.co.uk, 1 +partybounceplay.co.uk, 1 partycentrumdebinnenhof.nl, 1 partycentrumopenhuis.nl, 1 +partyhireformby.co.uk, 1 +partyhireisleofwight.co.uk, 1 +partyhireliverpool.co.uk, 1 +partyrocksbounce.co.uk, 1 partyschnaps.com, 1 +partyspaces.co.uk, 1 +partytime-uk.co.uk, 1 +partytimeltd.ie, 1 +partytownireland.co.uk, 1 +partytownmarquees.co.uk, 1 partyvan.io, 1 +partyzone.ie, 1 parvaneh.fr, 1 pasadenapooch.org, 1 pasadenasandwichcompany.com, 1 pasarella.eu, 1 +pascal-bourhis.net, 1 pascal-kannchen.de, 1 pascaline-jouis.fr, 1 pascalleguern.com, 1 @@ -20107,11 +21229,13 @@ pastormaremanoabruzes.com.br, 1 pastorsuico.com.br, 1 pasztor.at, 1 patadanabouca.pw, 1 +patbatesremodeling.com, 1 patdorf.com, 1 patechmasters.com, 1 patentfamily.de, 1 paterno-gaming.com, 1 patflix.com, 1 +pathagoras.com, 1 pathwaystoresilience.org, 1 pathwaytofaith.com, 1 patikabiztositas.hu, 1 @@ -20152,6 +21276,7 @@ paulomonteiro.pt, 1 paulov.com, 1 paulov.info, 1 paulov.ru, 1 +paulpetersen.dk, 1 paulrobertlloyd.com, 1 paulrotter.de, 1 paulschreiber.com, 1 @@ -20166,6 +21291,7 @@ pauspam.net, 1 pautadiaria.com, 1 pavando.com, 1 paveljanda.com, 1 +pavelkahouseforcisco.com, 1 pavelrebrov.com, 1 paw.cloud, 1 paw.pt, 1 @@ -20173,11 +21299,13 @@ pawelnazaruk.com, 1 pawsomebox.co.uk, 1 pawsr.us, 1 pay.ubuntu.com, 1 +pay8522.com, 1 payboy.rocks, 1 payclixpayments.com, 1 payfazz.com, 1 paylike.io, 1 payload.tech, 1 +payloc.io, 1 payme.uz, 1 payment-network.com, 1 paymentaccuracy.gov, 1 @@ -20241,7 +21369,9 @@ pebbles.net.in, 1 pecker-johnson.com, 1 pecot.fr, 1 pedicureduiven.nl, 1 +pedidamanosevilla.com, 1 pedimoda.com.br, 1 +pedrosaurus.com, 1 pedrosluiter.nl, 1 pedroventura.com, 0 peeekaaabooo.com, 1 @@ -20281,6 +21411,7 @@ peirong.me, 1 pekkapleppanen.fi, 1 pekoe.se, 1 pelanucto.cz, 1 +pelican.ie, 1 pelletsprice.com, 1 pelopogrund.com, 1 pelopoplot.com, 1 @@ -20300,7 +21431,9 @@ penrithapartments.com.au, 1 pensacolawinterfest.org, 1 pensador.com, 1 pensador.info, 1 +pensanisso.com, 1 pensioenfonds-ey.nl, 1 +pension-veldzigt.nl, 1 pension-waldesruh.de, 1 pensiunealido.ro, 1 pentandra.com, 1 @@ -20328,6 +21461,9 @@ perezdecastro.org, 1 perfect.in.th, 1 perfectbalance.tech, 1 perfectcloud.org, 1 +perfectionunite.com, 1 +perfectoparty.co.uk, 1 +perfectsnap.co.uk, 1 perfektesgewicht.com, 1 perfektesgewicht.de, 1 performancesantafe.org, 1 @@ -20394,6 +21530,7 @@ petplus.com, 1 petpost.co.nz, 0 petrachuk.ru, 1 petrasestakova.cz, 1 +petroscand.eu, 1 petruzz.net, 1 pettitcoat.com, 1 petwall.info, 1 @@ -20460,6 +21597,7 @@ philipp-trulson.de, 0 philippa.cool, 1 philippbirkholz.com, 1 philippbirkholz.de, 1 +philippebonnard.fr, 1 philipperoose.be, 1 philippheenen.de, 1 philippkeschl.at, 1 @@ -20488,6 +21626,7 @@ photistic.org, 1 photo-paysage.com, 1 photo.org.il, 1 photoartelle.com, 1 +photoboothpartyhire.co.uk, 1 photodeal.fr, 1 photographe-reims.com, 1 photographyforchange.com, 1 @@ -20538,7 +21677,9 @@ pic.sr, 1 pic2map.com, 1 picallo.es, 1 piccirello.com, 1 +piccolo-parties.co.uk, 1 pickme.nl, 1 +pickormix.co.uk, 1 picksin.club, 1 piclect.com, 1 picoauto.com, 1 @@ -20668,6 +21809,7 @@ pixelbash.de, 1 pixelcubed.com, 1 pixelesque.uk, 1 pixelfou.com, 1 +pixelgliders.de, 1 pixelminers.net, 1 pixelpoint.io, 1 pixelrain.info, 1 @@ -20685,12 +21827,15 @@ pizzeria-mehrhoog.de, 1 pizzeriacolore.com, 1 pj539999.com, 1 pj83.duckdns.org, 1 +pjentertainments.co.uk, 1 pjili.com, 1 +pjleisure.co.uk, 1 pjuu.com, 0 pk.search.yahoo.com, 0 pkgt.de, 0 pko.ch, 1 pkov.cz, 1 +pkphotobooths.co.uk, 1 pl-cours.ch, 1 pl.search.yahoo.com, 0 plaasprodukte.com, 1 @@ -20733,6 +21878,7 @@ plantastique.ch, 1 plantastique.com, 1 planteforum.no, 1 plantroon.com, 1 +plantrustler.com, 1 plaque-funeraire.fr, 1 plassmann.ws, 1 plasti-pac.ch, 1 @@ -20748,6 +21894,8 @@ plattner.club, 1 play.cash, 1 play.google.com, 1 playanka.com, 1 +playawaycastles.co.uk, 1 +playdaysparties.co.uk, 1 playdreamcraft.com.br, 1 playform.cloud, 1 playhappywheelsunblocked.com, 1 @@ -20761,9 +21909,13 @@ playsoundevents.be, 1 playsource.co, 1 playsprout.industries, 0 playtictactoe.org, 1 +playtimebouncycastles.co.uk, 1 playwhyyza.com, 1 +playzonecastles.co.uk, 1 +pld-entertainment.co.uk, 1 pldx.org, 1 please-deny.me, 1 +pleaseuseansnisupportedbrowser.ml, 1 pleasure-science.com, 1 pleine-conscience.ch, 1 plen.io, 1 @@ -20776,6 +21928,7 @@ plinc.co, 1 pliosoft.com, 1 plitu.de, 1 ploader.ru, 1 +plochka.bg, 1 plongee-phuket.fr, 1 ploofer.com, 1 plot.ly, 1 @@ -20806,7 +21959,9 @@ pluta.net, 1 pluto.life, 1 plutokorea.com, 1 plutopia.ch, 1 +plymouthbouncycastles.co.uk, 1 plymouthglassgallery.com, 1 +plymouthsoftplay.co.uk, 1 plzdontpwn.me, 1 plzenskybarcamp.cz, 1 plzh4x.me, 1 @@ -20848,6 +22003,8 @@ pocobelli.ch, 1 podcast.style, 1 podemos.info, 1 podia.com.gr, 1 +podroof.com, 1 +podroof.com.au, 1 podshrink.de, 1 poe.digital, 1 poed.com.au, 1 @@ -20855,13 +22012,14 @@ poed.net.au, 1 poedgirl.com, 1 poeg.cz, 1 pogoswine.com, 1 +pogrebisky.net, 1 pogs.us, 1 -poinsot.info, 1 pointaction.com, 1 pointagri.com, 1 pointhost.de, 1 points4unitedway.com, 1 pointsixtyfive.com, 1 +pointum.com, 1 poiru.net, 1 poitiers-ttacc-86.eu.org, 1 pojer.me, 1 @@ -20921,6 +22079,7 @@ ponteus.com, 1 pontodogame.com.br, 1 pony.tf, 1 ponychan.net, 1 +ponycyclepals.co.uk, 1 ponyfoo.com, 1 poolinstallers.co.za, 1 poollicht.be, 1 @@ -20940,6 +22099,7 @@ popoway.cloud, 1 popoway.me, 1 poppetsphere.de, 1 population-ethics.com, 1 +popupsoftplay.com, 1 poquvi.net, 1 porg.es, 1 pork.org.uk, 1 @@ -20947,6 +22107,7 @@ porn77.info, 1 pornbase.info, 1 pornbay.org, 1 pornblog.org, 1 +porncandi.com, 1 pornohub.su, 1 pornolab-net.appspot.com, 0 pornomens.be, 1 @@ -20963,11 +22124,13 @@ portalkla.com.br, 1 portalzine.de, 1 portefeuillesignalen.nl, 1 portercup.com, 1 +porterranchelectrical.com, 1 portofacil.com, 1 portofrotterdam.com, 1 portosonline.pl, 1 portraitsystem.biz, 1 portsdebalears.gob.es, 1 +portsmouthbouncycastles.co.uk, 1 portugalsko.net, 1 portvaletickets.com, 1 porybox.com, 1 @@ -20975,6 +22138,7 @@ porzgmbh.de, 1 posaunenchor-senden.de, 1 posbank.co.uk, 1 poseidonwaterproofing.com, 1 +poshcastles.co.uk, 1 poshsecurity.com, 1 positionus.io, 1 positive.com.cy, 1 @@ -21101,6 +22265,8 @@ prelved.nl, 1 prelved.pl, 1 prelved.se, 1 premaritalsex.info, 1 +premierbouncycastles.co.uk, 1 +premierevents.ie, 1 premierheart.com, 1 premiership-predictors.co.uk, 1 premiumweb.co.id, 1 @@ -21112,6 +22278,7 @@ prepaid-cards.xyz, 1 prepaidgirl.com, 1 prepaidkredietkaart.be, 1 prepare-job-hunting.com, 1 +preparedcapital.com, 1 preparetheword.com, 0 presbee.com, 1 prescotonline.co.uk, 1 @@ -21122,10 +22289,13 @@ president.bg, 1 prespanok.sk, 1 presscenter.jp, 1 presses.ch, 1 +pressography.org, 1 pressrush.com, 1 pressureradio.com, 1 prestburyscouts.org.uk, 1 prestige-car-location.ch, 1 +prestigebouncycastles.co.uk, 1 +prestigeeventshire.co.uk, 1 prestigerepairs.com.au, 1 prestigesigns.net, 1 prestonandsons.com.au, 1 @@ -21144,6 +22314,7 @@ pridetechdesign.com, 1 prielwurmjaeger.de, 1 prifo.se, 1 primaconsulting.net, 1 +primalinea.pro, 1 primates.com, 1 primecaplending.com, 1 primewho.org, 1 @@ -21167,12 +22338,14 @@ printexpress.cloud, 1 printf.de, 1 printler.com, 1 printmet.com, 1 +printsos.com, 1 prior-it.be, 1 priorite-education.com, 1 priorityelectric.net, 1 prioritynissannewportnewsparts.com, 1 prism-communication.com, 1 pristal.eu, 1 +pristineevents.co.uk, 1 priv.im, 1 priva.si, 1 privacy-week-vienna.at, 1 @@ -21211,6 +22384,7 @@ pro-mile.pl, 1 pro-netz.de, 1 pro-wiert.pl, 1 proactive.run, 1 +proautorepairs.com.au, 1 probas.de, 1 probase.ph, 1 probely.com, 1 @@ -21269,6 +22443,7 @@ projectarmy.net, 0 projectasterk.com, 1 projectbenson.com, 0 projectblackbook.us, 1 +projectcastle.tech, 1 projectnom.com, 1 projectsecretidentity.com, 1 projectsecretidentity.org, 1 @@ -21283,6 +22458,7 @@ projest.ch, 1 prok.pw, 1 prokop.ovh, 1 prolan.pw, 1 +promarketer.net, 1 promedicalapplications.com, 1 prometheanfire.net, 1 prometheanfire.org, 1 @@ -21312,7 +22488,6 @@ propertyone.mk, 1 propipesystem.com, 1 proplan.co.il, 1 propmag.co, 1 -proposalonline.com, 1 propr.no, 1 propseller.com, 1 proslimdiets.com, 1 @@ -21345,6 +22520,7 @@ provisionaldriving.com, 1 provitacare.com, 1 provitec.com, 1 provitec.de, 1 +provokator.co.il, 1 proweser.de, 1 prowise.com, 1 proximityradio.fr, 1 @@ -21379,6 +22555,7 @@ psb1.org, 1 psb1911.com, 1 psb4ukr.org, 1 psbarrett.com, 1 +psc.gov, 1 pschierl.com, 1 psdsfn.com, 1 pseta.ru, 1 @@ -21426,6 +22603,7 @@ ptbx.co, 1 pterodactylus.cz, 1 ptgoldensun.com, 1 ptm.ro, 0 +ptmarquees.ie, 1 ptrbrs.nl, 1 ptrl.ws, 1 ptron.org, 1 @@ -21468,6 +22646,7 @@ punkapoule.fr, 1 punkdns.top, 1 punknews.org, 1 pupboss.com, 1 +puppet.pl, 1 purahealthyliving.com, 1 purelunch.co.uk, 1 purevapeofficial.com, 1 @@ -21488,6 +22667,7 @@ purrfectmembersclub.com, 1 purrfectswingers.com, 1 puryearlaw.com, 1 pusatinkubatorbayi.com, 1 +pushstar.com, 1 put.moe, 1 put.re, 1 putatara.net, 1 @@ -21503,6 +22683,7 @@ puzzlepoint.ch, 1 pv-paderborn-now.de, 1 pvagner.tk, 1 pvcvoordeel.nl, 0 +pvmotorco.com, 1 pvpcraft.ca, 1 pvtschlag.com, 1 pwdgen.net, 0 @@ -21529,11 +22710,14 @@ pyspace.org, 1 pythia.nz, 1 python-hyper.org, 1 python.org, 0 +pyzlnar.com, 1 q-inn.com, 1 q-inn.nl, 1 q8mp3.me, 1 +qa-brandywineglobal.com, 1 qa.fedoraproject.org, 1 qa.stg.fedoraproject.org, 1 +qaconstrucciones.com, 1 qamrulhaque.com, 1 qandavision.com, 0 qapital.com, 1 @@ -21646,6 +22830,7 @@ query-massage.com, 1 question.com, 1 questionable.host, 1 questsocial.it, 1 +quevisiongrafica.com, 1 quickboysvrouwen2.nl, 1 quietapple.org, 1 quikchange.net, 1 @@ -21661,6 +22846,7 @@ quocdesign.ch, 1 quotev.com, 1 quppa.net, 1 quuz.org, 1 +qvggroup.com, 1 qvitoo.com, 1 qwans.nl, 1 qwant.com, 1 @@ -21693,18 +22879,22 @@ rabbit.wales, 0 rabbitvcactus.eu, 1 rabota-x.ru, 1 rabotaescort.com, 1 +rabynska.eu, 1 racasdecachorro.org, 1 +raccoltarifiuti.com, 1 racermaster.xyz, 0 raceviewcycles.com, 1 raceviewequestrian.com, 1 rachaelrussell.com, 1 rachelchen.me, 1 rachelreagan.com, 1 +rachelsbouncycastles.co.uk, 1 rachida-dati.eu, 1 racius.com, 1 rackblue.com, 1 rackerlab.com, 1 raconconsulting.co.uk, 1 +racoo.net, 1 racunovodstvo-prina.si, 1 rad-route.de, 1 radar.sx, 1 @@ -21732,6 +22922,7 @@ radishmoon.com, 1 radondetectionandcontrol.com, 1 radreisetraumtreibstoff.de, 1 radyn.com, 1 +raeu.me, 1 raeven.nl, 1 rafaelmagalhaesweb.com, 1 rafey.xyz, 1 @@ -21743,6 +22934,9 @@ raghavdua.in, 1 ragnaroktop.com.br, 1 rahamasin.eu, 1 raiblockscommunity.net, 1 +raidensnakesden.co.uk, 1 +raidensnakesden.com, 1 +raidensnakesden.net, 1 raiffeisen-kosovo.com, 1 railgun.ac, 1 railgun.com.cn, 1 @@ -21750,6 +22944,7 @@ railjob.cn, 1 railyardurgentcare.com, 1 rainbin.com, 1 rainbowbay.org, 1 +rainbowinflatables.co.uk, 1 rainbowstore.com.au, 1 rainbowstore.com.ua, 1 rainforest.engineering, 1 @@ -21759,6 +22954,7 @@ rainway.io, 1 raiseyourflag.com, 1 raissarobles.com, 1 raitza.de, 1 +rajyogarishikesh.com, 1 rak-business-service.com, 1 rakugokai.net, 1 ralf-huebscher.de, 1 @@ -21778,12 +22974,14 @@ ram.nl, 1 rambii.de, 1 ramblingrf.tech, 1 rametrix.com, 1 +ramov.com, 1 ramrecha.com, 1 ramsor-gaming.de, 1 randc.org, 1 random-samplings.org, 1 randomadversary.com, 1 randombit.eu, 1 +randombits.co.uk, 1 randomdysfunctions.com, 1 randomkoalafacts.com, 1 randomprecision.co.uk, 1 @@ -21805,6 +23003,9 @@ raraflora.com.au, 1 rareative.com, 1 raryosu.info, 1 rasagiline.com, 1 +rascals-castles.co.uk, 1 +rascalscastles.co.uk, 1 +rascalscastlesdoncaster.co.uk, 1 rasebo.ro, 1 raspass.me, 1 raspberry.us, 1 @@ -21824,6 +23025,7 @@ raumzeitlabor.de, 0 rauros.net, 1 rautermods.net, 1 ravchat.com, 1 +ravengergaming.net, 1 ravensbuch.de, 1 ravhaaglanden.org, 1 ravindran.me, 1 @@ -21859,6 +23061,7 @@ rc-offi.net, 1 rc-shop.ch, 1 rc7.ch, 1 rca.fr, 1 +rcdocuments.com, 1 rchrdsn.uk, 1 rclsm.net, 1 rcmurphy.com, 1 @@ -21899,12 +23102,14 @@ real-it.nl, 1 realcapoeira.ru, 1 realestateonehowell.com, 1 realestateradioshow.com, 1 +realfamilyincest.com, 1 realgarant-shop.de, 0 realhorsegirls.net, 1 realhost.name, 1 realitea.co.uk, 1 reality.news, 1 reality0ne.com, 0 +realitycrazy.com, 1 reallifeforums.com, 1 realloc.me, 1 really-simple-ssl.com, 1 @@ -22016,6 +23221,7 @@ redshield.co, 1 redshiftcybersecurity.co.za, 1 redshiftlabs.com.au, 1 redshoeswalking.net, 1 +redsicom.com, 1 redstickfestival.org, 1 redstoner.com, 1 redteam-pentesting.de, 1 @@ -22025,6 +23231,7 @@ redwoodpaddle.pt, 1 redzurl.com, 1 reed-sensor.com, 1 reedloden.com, 1 +reepay.com, 1 reeson.at, 1 reeson.de, 1 reeson.info, 1 @@ -22063,11 +23270,13 @@ regionale.org, 1 regiosalland.nl, 1 regiovertrieb.de, 0 register.gov.uk, 1 +registerforevent.co.uk, 1 registrar.io, 1 regmyr.se, 1 regnix.net, 1 regnr.info, 1 regolithmedia.com, 1 +regraph.de, 1 regsec.com, 1 regulations.gov, 1 reha-honpo.jp, 1 @@ -22083,6 +23292,7 @@ reidasbombas.com, 1 reignsphere.net, 1 reiki-coaching.nl, 0 reilly.io, 1 +reimaginebelonging.de, 1 reimann.me, 1 reimers.de, 1 reimu.ink, 0 @@ -22092,12 +23302,14 @@ reinaldudras.ee, 1 reinaldudrasfamily.ee, 1 reineberthe.ch, 1 reinencaressa.be, 1 +reinfer.io, 1 reinhard.codes, 1 reinhardtsgrimma.de, 1 reinierjonker.nl, 1 reinoldus.ddns.net, 1 reinout.nu, 1 reinouthoornweg.nl, 1 +reisekosten-gorilla.com, 1 reishunger.de, 1 reismil.ch, 1 rejahrehim.com, 1 @@ -22123,6 +23335,7 @@ remedioscaserosparalacistitis.com, 1 remedioskaseros.com, 0 remedyrehab.com, 1 rememberthemilk.com, 0 +remodelwithlegacy.com, 1 remonti.info, 1 remote.so, 1 remoteutilities.com, 1 @@ -22149,6 +23362,7 @@ rent-a-coder.de, 1 rentasweb.gob.ar, 1 rentbrowser.com, 1 rentinsingapore.com.sg, 1 +rentourhomeinprovence.com, 1 renuo.ch, 0 reorz.com, 1 reox.at, 0 @@ -22156,11 +23370,11 @@ repaik.com, 1 repair.by, 1 repaper.org, 1 repaxan.com, 1 +repex.co.il, 1 replaceits.me, 1 replicagunsswords.com, 0 replicaswiss.nl, 1 report-incident.de, 1 -report-to.com, 1 report-to.io, 1 report-uri.com, 1 report-uri.io, 1 @@ -22173,10 +23387,12 @@ reporturi.io, 1 reporturl.com, 1 reporturl.io, 1 reposaarenkuva.fi, 1 +reproduciblescience.org, 1 reproductive-revolution.com, 1 reproductiverevolution.com, 1 reprogramming-predators.com, 1 reprogrammingpredators.com, 1 +reprozip.org, 1 repsomelt.com, 1 reptrax.com, 1 republic.gr, 1 @@ -22242,6 +23458,7 @@ retroarms.com, 1 retroarms.cz, 1 retrofitlab.com, 1 retroity.net, 1 +retropage.co, 1 retroroundup.com, 1 retrotracks.net, 1 rets.org.br, 1 @@ -22283,6 +23500,7 @@ rezun.cloud, 1 rf.tn, 1 rfeif.org, 1 rgavmf.ru, 1 +rgbinnovation.com, 1 rgcomportement.fr, 1 rgservers.com, 1 rhees.nl, 1 @@ -22313,6 +23531,7 @@ riceglue.com, 1 richardb.me, 1 richardcrosby.co.uk, 1 richardhering.de, 1 +richardjgreen.net, 1 richardlangworth.com, 1 richardlugten.nl, 1 richardrblocker.net, 1 @@ -22321,11 +23540,13 @@ richardson.pictures, 1 richardson.software, 1 richardson.systems, 1 richardwarrender.com, 1 +richeza.com, 1 richonrails.com, 1 ricketyspace.net, 1 ricki-z.com, 1 ricknox.com, 1 rickrongen.nl, 1 +rickscastles.co.uk, 1 rickweijers.nl, 1 rickyromero.com, 1 rico-brase.de, 0 @@ -22422,6 +23643,7 @@ rmpsolution.de, 1 rms.sexy, 1 rmsides.com, 1 rmstudio.tw, 1 +rmsupply.nl, 1 rnag.ie, 1 rnb-storenbau.ch, 1 rnt.cl, 1 @@ -22460,6 +23682,7 @@ robinsonyu.com, 1 robinvdmarkt.nl, 1 robinwinslow.uk, 1 robjager-fotografie.nl, 1 +robocop.no, 1 robodeidentidad.gov, 1 robohash.org, 1 robomonkey.org, 1 @@ -22482,12 +23705,17 @@ rocketgnomes.com, 1 rocketr.net, 1 rockfax.com, 1 rockhounds.co.za, 1 +rockinronniescastles.co.uk, 1 +rockitinflatables.co.uk, 1 rockpesado.com.br, 1 rockuse.com.br, 1 rockymountainspice.com, 1 rocssti.net, 1 roddis.net, 1 rodehutskors.net, 1 +rodeobull.biz, 1 +rodeohire.com, 1 +rodeosales.co.uk, 1 rodevlaggen.nl, 1 rodichi.net, 1 rodolfo.gs, 1 @@ -22519,6 +23747,7 @@ rogersvilleumc.org, 1 rognhaugen.no, 1 rogue-e.xyz, 1 roguefinancial.com, 1 +roguefortgame.com, 1 roguesignal.net, 1 roguetechhub.org, 1 rohanbassett.com, 1 @@ -22536,6 +23765,7 @@ rolandkolodziej.com, 1 rolandszabo.com, 1 rolliwelt.de, 1 rolodato.com, 1 +roma-servizi.it, 1 romaimperator.com, 1 romainmuller.xyz, 1 roman-pavlik.cz, 1 @@ -22551,6 +23781,7 @@ rome.dating, 1 rommelwood.de, 1 ronanrbr.com, 1 rondommen.nl, 1 +rondouin.fr, 1 rondreis-planner.nl, 1 ronghexx.com, 1 roninf.ch, 1 @@ -22635,6 +23866,7 @@ rowancasting.ie, 1 rowankaag.nl, 1 rowlog.com, 1 rows.io, 1 +roxiesbouncycastlehire.co.uk, 1 roxtri.cz, 1 royal-mangal.ch, 1 royal-rangers.de, 1 @@ -22659,6 +23891,7 @@ rpine.net, 1 rpy.xyz, 1 rq-labo.jp, 1 rr105.de, 1 +rraesthetics.com, 1 rrdesignsuisse.com, 1 rrg-partner.ch, 1 rring.me, 1 @@ -22672,6 +23905,7 @@ rsgcard.com, 1 rsi.im, 0 rsingermd.com, 1 rskuipers.com, 1 +rsl.gd, 1 rsldb.com, 1 rsm-intern.de, 1 rsm-liga.de, 1 @@ -22700,6 +23934,7 @@ rteplayer.com, 1 rtesport.eu, 1 rtfpessoa.xyz, 1 rtho.me, 1 +rtrinflatables.co.uk, 1 rtsr.ch, 1 rtvi.com, 1 rtwcourse.com, 1 @@ -22707,6 +23942,7 @@ ru-sprachstudio.ch, 1 ru.search.yahoo.com, 0 ruanmi.de, 1 rubberfurs.org, 1 +rubberlegscastles.co.uk, 1 rubbermaidoutlet.com, 1 rubbix.net, 1 rubbleremovalsbenoni.co.za, 1 @@ -22722,6 +23958,7 @@ rubyquincunx.org, 1 rubytune.com, 1 rucnerobene.eu, 1 ruconsole.com, 1 +rud.is, 1 rudd-o.com, 1 rudelune.fr, 1 ruderverein-gelsenkirchen.de, 1 @@ -22750,6 +23987,7 @@ rulu.co, 1 rulu.tv, 1 rulutv.com, 1 rummel-platz.de, 1 +rumplesinflatables.co.uk, 1 rumtaste.com, 1 rumtaste.de, 1 run-forrest.run, 1 @@ -22774,6 +24012,7 @@ rusi-ns.ca, 1 ruskod.net, 1 rusl.net, 1 russellandbrowns.co.uk, 1 +russellupevents.co.uk, 1 russia.dating, 1 russianorthodoxchurch.co.uk, 1 russt.me, 1 @@ -22816,6 +24055,7 @@ rythgs.co, 0 ryuu.es, 1 ryzhov.me, 1 rzegroup.com, 1 +rzentarzewski.net, 1 s-c.se, 1 s-cubed.net, 1 s-ip-media.de, 1 @@ -22831,11 +24071,13 @@ s2member.com, 1 s3cur3.it, 1 s3gfault.com, 1 s3n.se, 1 +s404.de, 1 s4db.net, 1 s4tips.com, 1 s4ur0n.com, 1 s8a.us, 1 s95.de, 1 +sa-blog.net, 1 sa-mp.ro, 1 sa.net, 1 saabpartsdistribution.com, 1 @@ -22890,6 +24132,7 @@ sagsmarseille.com, 1 sahar.io, 1 sahb.dk, 1 sahkotyot.eu, 1 +said.id, 1 said.my.id, 1 saier.me, 1 saifoundation.in, 1 @@ -22951,6 +24194,7 @@ salzamt.tk, 1 sam-football.fr, 1 samanthahumphreysstudio.com, 1 samanthasgeckos.com, 1 +samappleton.com, 1 samaritainsmeyrin.ch, 1 samaritan.tech, 1 samaritansnet.org, 1 @@ -22993,6 +24237,7 @@ sanatorii-sverdlovskoy-oblasti.ru, 1 sanatorionosti.com.ar, 1 sanatrans.com, 1 sanchez.adv.br, 1 +sancy.de, 1 sand-islets.de, 1 sandalj.com, 1 sandbagexpress.com, 1 @@ -23003,6 +24248,8 @@ sanderknape.com, 1 sanderkoenders.eu, 1 sanderkoenders.nl, 1 sandervankasteel.nl, 0 +sandhaufen.tk, 1 +sandmanintel.com, 1 sandmarc.cz, 1 sandobygg.se, 1 sandogruppen.se, 1 @@ -23010,6 +24257,7 @@ sandor.wtf, 1 sandrainden.nl, 1 sandraindenfotografie.nl, 1 sandrolittke.de, 1 +sanepsychologen.nl, 1 sanglierhurlant.fr, 1 sangwon.io, 1 sanik.my, 1 @@ -23052,6 +24300,7 @@ saposute-s.jp, 1 sapporobeer.com, 1 sapprendre.ch, 1 sapuncheta.com, 1 +saq.com, 1 sarahbeckettharpist.com, 1 sarahlicity.co.uk, 0 sarahlicity.me.uk, 1 @@ -23088,6 +24337,7 @@ satmd.de, 1 satrent.com, 1 satrent.se, 1 saturn.pl, 1 +saudavel.com.vc, 1 saudeealimentos.com, 1 saudeeconforto.com.br, 1 saudeintimadamulher.com.br, 1 @@ -23112,6 +24362,7 @@ savekorea.net, 1 savenet.org, 1 saveora.com, 1 saveora.shop, 1 +savethedogfishfoundation.org, 1 savetheinternet.eu, 1 savic.com, 1 savingbytes.com, 1 @@ -23146,7 +24397,6 @@ sbit.com.br, 1 sblum.de, 1 sbm.cloud, 1 sbo-dresden.de, 1 -sbobetfun.com, 1 sbr.red, 1 sbsavings.bank, 1 sbssoft.ru, 1 @@ -23155,11 +24405,14 @@ scalaire.com, 1 scalaire.fr, 1 scalesbiolab.com, 1 scaling.solutions, 1 +scallywagsbouncycastles.co.uk, 1 +scamblockplus.org, 1 scandicom.fi, 1 scandinavia.dating, 1 scangeo.net, 1 scanleasing.net, 1 scanpay.dk, 1 +scatsbouncingcastles.ie, 1 scenastu.pl, 1 scenester.tv, 0 scenicbyways.info, 1 @@ -23292,6 +24545,7 @@ science-questions.org, 1 science-texts.de, 1 science360.gov, 1 sciencebase.gov, 1 +scienceminnesota.com, 1 sciencemonster.co.uk, 1 sciencesolutions.eu, 1 sciencex.com, 1 @@ -23312,6 +24566,7 @@ scorocode.ru, 1 scorp13.com, 1 scottainslie.me.uk, 1 scottgruber.me, 1 +scottgthomas.com, 1 scotthel.me, 1 scotthelme.co.uk, 1 scotthelme.com, 1 @@ -23321,6 +24576,7 @@ scoutdb.ch, 1 scoutingridderkerk.nl, 1 scoutnet.de, 1 scp-trens.notaires.fr, 1 +scpartyentertainment.co.uk, 1 scrambox.com, 1 scramget.com, 1 scramsoft.com, 1 @@ -23342,6 +24598,7 @@ scrumstack.co.uk, 1 scryfall.com, 1 scs-simulatoren.de, 1 scswam.com, 1 +sctm.at, 1 sctrainingllc.com, 1 scubadiving-phuket.com, 1 sculpture.support, 1 @@ -23407,6 +24664,7 @@ sebastian.expert, 1 sebastianblade.com, 1 sebastianboegl.de, 1 sebastiaperis.com, 1 +sebi.cf, 1 sebi.org, 1 sec-mails.de, 1 sec-research.com, 1 @@ -23415,6 +24673,7 @@ sec.ec, 1 sec.gd, 1 sec3ure.co.uk, 1 secanje.nl, 1 +secboom.com, 1 seccomp.ru, 1 secctexasgiving.org, 0 seceye.cn, 1 @@ -23427,6 +24686,7 @@ secomo.org, 1 seconfig.sytes.net, 1 secpatrol.de, 1 secretar.is, 1 +secretnation.net, 1 secretofanah.com, 1 secretpanties.com, 1 secretsanta.fr, 1 @@ -23463,6 +24723,7 @@ securetheorem.com, 1 securetronic.ch, 1 securify.nl, 1 securiscan.io, 1 +security-24-7.com, 1 security-brokers.com, 1 security.gives, 1 security.google.com, 1 @@ -23541,6 +24802,7 @@ selent.me, 1 seleondar.ru, 1 self-evident.org, 1 self-signed.com, 1 +self.nu, 1 selfassess.govt.nz, 1 selfdestruct.net, 1 selfhosters.com, 1 @@ -23552,6 +24814,7 @@ selfmade4u.de, 1 selfserverx.com, 0 selkiemckatrick.com, 1 sellajoch.com, 1 +sellercritic.com, 1 sellguard.pl, 1 sellme.biz, 1 sellmoretires.com, 1 @@ -23594,6 +24857,7 @@ seo-linz.at, 1 seo-nerd.de, 1 seo-portal.de, 1 seo.consulting, 1 +seo.london, 1 seo.tl, 1 seoagentur2go.de, 1 seoarchive.org, 1 @@ -23664,6 +24928,7 @@ serverlauget.no, 1 serverlog.net, 1 serveroffline.net, 0 serverpedia.de, 1 +serversftw.com, 1 serverstuff.info, 1 serversuit.com, 1 servertastic.com, 1 @@ -23720,9 +24985,13 @@ seyfarth.de, 1 seyr.it, 1 seyr.me, 1 sfaturiit.ro, 1 +sfdev.ovh, 1 sfg-nordholz.de, 1 +sfile.eu, 1 sfirat-haomer.com, 1 +sfleisure.com, 1 sfo-fog.ch, 1 +sft-framework.org, 1 sftool.gov, 1 sg-elektro.de, 1 sg.search.yahoo.com, 0 @@ -23737,6 +25006,7 @@ sh-heppelmann.de, 1 sh-network.de, 0 sh4y.com, 1 shaaaaaaaaaaaaa.com, 1 +shad.waw.pl, 1 shadesofgrayadr.com, 1 shadesofgraylaw.com, 1 shadex.net, 1 @@ -23765,6 +25035,7 @@ shaken110.com, 1 shakepeers.org, 0 shakes4u.com, 1 shakespearesolutions.com.au, 0 +shakespearevet.com, 1 shalott.org, 1 shamara.info, 1 shamariki.ru, 1 @@ -23782,6 +25053,7 @@ shansing.space, 1 sharanyamunsi.net, 1 sharedhost.de, 1 shareeri.com, 1 +sharemessage.net, 1 shareoffice.ch, 1 shareoine.com, 1 sharepointdrive.com, 1 @@ -23805,14 +25077,17 @@ shaun.net, 1 shaundanielz.com, 1 shaunharker.com, 1 shav.it, 1 +shavegazette.com, 1 shavingks.com, 1 shawcentral.ca, 0 +shawnbsmith.me, 1 shawnhogan.com, 1 shawnwilson.info, 1 shazbots.org, 1 shazzlemd.com, 1 shazzlepro.com, 1 sheaf.site, 1 +shearcomfort.com, 1 sheehyinfinitioftysonsparts.com, 1 sheepfriends.com, 1 sheilasdrivingschool.com, 1 @@ -23852,6 +25127,7 @@ shikimori.org, 1 shikinobi.com, 1 shimi.net, 1 shimo.im, 1 +shin-inc.jp, 1 shinghoi.com, 1 shining.gifts, 1 shinko-osaka.jp, 1 @@ -23951,6 +25227,7 @@ siamega.com, 1 siamojo.com, 1 siamsnus.com, 1 siao-mei.com, 1 +sibfk.org, 1 sibrenvasse.nl, 1 siciliamconsulting.com, 1 sicilianbalm.com, 1 @@ -23967,6 +25244,7 @@ sidium.de, 1 sidnicio.us, 1 sidonge.com, 1 sidongkim.com, 1 +sidpod.ru, 1 siebeve.be, 1 siegemund-frankfurt.de, 1 sieh.es, 1 @@ -24012,6 +25290,7 @@ silentmode.com, 1 siliconchip.me, 1 silkebaekken.no, 1 sillisalaatti.fi, 1 +sillysnapz.co.uk, 1 siloportem.net, 1 silqueskineyeserum.com, 1 silsha.me, 1 @@ -24076,6 +25355,7 @@ silverseen.com, 1 silverstartup.sk, 1 silverwind.io, 1 silviamacallister.com, 1 +silvine.xyz, 1 silvistefi.com, 1 sim-karten.net, 1 sim-sim.appspot.com, 1 @@ -24117,6 +25397,7 @@ simplecontacts.com, 1 simplednscrypt.org, 1 simplefraud.com, 1 simpleinout.com, 1 +simpleinvoices.io, 1 simplerses.com, 1 simplesamlphp.org, 1 simpletax.ca, 1 @@ -24126,6 +25407,7 @@ simplexsupport.com, 0 simplia.cz, 1 simplicitypvp.net, 1 simplidesigns.nl, 1 +simply.scot, 1 simplycharlottemason.com, 1 simplycloud.de, 1 simplyfixit.co.uk, 1 @@ -24175,6 +25457,8 @@ sinuelovirtual.com.br, 1 sion.moe, 1 siqi.wang, 1 siraweb.org, 1 +sirbouncealotcastles.co.uk, 1 +sirbouncelot.co.uk, 1 sirena.co.jp, 1 sirenslove.com, 1 siriuspup.com, 1 @@ -24205,9 +25489,11 @@ sitsy.ru, 0 sivyerge.com, 1 sixpackholubice.cz, 1 sizzle.co.uk, 1 +sj-leisure.com, 1 sja-se-training.com, 1 sjd.is, 1 sjdaws.com, 1 +sjleisure.co.uk, 1 sjoorm.com, 1 sjsc.fr, 1 sk-net.cz, 1 @@ -24231,6 +25517,7 @@ skei.org, 1 skepticalsports.com, 1 sketchmyroom.com, 1 sketchywebsite.net, 1 +skhire.co.uk, 1 skhoop.cz, 1 skia.org, 0 skifairview.com, 1 @@ -24273,6 +25560,7 @@ skram.de, 1 skryptersi.pl, 1 sktan.com, 1 sktsolution.com, 0 +skuldwyrm.no, 1 skwile-cafe.com, 1 sky-aroma.com, 1 skydragoness.com, 1 @@ -24280,6 +25568,7 @@ skydrive.live.com, 0 skylgenet.nl, 1 skylightcreative.com.au, 1 skylinertech.com, 1 +skylineservers.com, 1 skylocker.net, 1 skylocker.nl, 1 skyloisirs.ch, 1 @@ -24288,11 +25577,14 @@ skynet233.ch, 1 skynethk.com, 1 skynetnetwork.eu.org, 1 skynetz.tk, 1 +skype.com, 1 skypoker.com, 1 skyris.co, 1 +skys-entertainment.com, 1 skysuite.nl, 1 skyvault.io, 1 skyveo.ml, 1 +skyzimba.com.br, 1 sl0.us, 1 sl1pkn07.wtf, 1 slack-files.com, 1 @@ -24312,6 +25604,7 @@ slash64.uk, 1 slashbits.no, 1 slaughter.com, 1 slaughterhouse.fr, 1 +slavasveta.info, 1 slaws.io, 1 sleeplessbeastie.eu, 1 sleepmap.de, 1 @@ -24329,6 +25622,7 @@ slimk1nd.nl, 1 slimmerbouwen.be, 1 slimspots.com, 1 slingo-sta.com, 1 +slingo.com, 1 slingooriginals.com, 1 slingoweb.com, 1 slink.hr, 1 @@ -24375,6 +25669,7 @@ smalltalkconsulting.com, 1 smaltimento.napoli.it, 1 smart-cp.jp, 1 smart-informatics.com, 1 +smart-shapes.co.uk, 1 smart-wohnen.net, 1 smart.gov, 1 smartairkey.com, 1 @@ -24418,10 +25713,12 @@ smdcn.net, 1 sme-gmbh.net, 1 smeetsengraas.com, 1 smeso.it, 1 +smi-a.me, 1 smiatek.name, 1 smileandpay.com, 1 smileawei.com, 1 smiledirectsales.com, 1 +smilessoftplay.co.uk, 1 smime.io, 1 smimea.info, 1 smipty.cn, 1 @@ -24469,6 +25766,7 @@ snatch.com.ua, 1 snazel.co.uk, 1 snazzie.nl, 1 sncdn.com, 1 +sndbouncycastles.co.uk, 1 sneak.berlin, 1 sneaker.date, 1 sneakpod.de, 1 @@ -24496,6 +25794,7 @@ snight.co, 1 snille.com, 1 snl.no, 0 snod.land, 1 +snote.io, 1 snoupon.com, 1 snovey.com, 1 snow-online.com, 1 @@ -24516,6 +25815,7 @@ snuff.porn, 1 snughealth.org.uk, 1 sny.no, 1 so-healthy.co.uk, 1 +so.is-a-cpa.com, 1 soapitup.com.au, 1 sobaya-gohei.com, 1 sobelift.com, 1 @@ -24525,6 +25825,7 @@ soboleva-pr.com.ua, 1 sobotkama.eu, 1 socal-babes.com, 1 soccersavings.com, 1 +soccorso-stradale.org, 1 sochi-sochno.ru, 1 soci.ml, 1 social-events.net, 0 @@ -24550,6 +25851,7 @@ sockeye.io, 1 sockscap64.com, 1 socoastal.com, 1 sodafilm.de, 1 +sodexam.pro, 1 sodi.nl, 1 sodiao.cc, 1 soe-server.com, 1 @@ -24558,13 +25860,18 @@ sofabedshop.de, 1 sofiavanmoorsel.com, 1 sofort.com, 1 sofortueberweisung.de, 1 +softandbouncy.co.uk, 1 softanka.com, 1 softballrampage.com, 1 softclean.pt, 1 +softplay4hire.co.uk, 1 +softplaynation.co.uk, 1 softprayog.in, 1 softrobot.se, 1 +softtennis-zenei.com, 1 softwarebetrieb.de, 1 softwaredesign.foundation, 1 +softwarevoortherapeuten.nl, 1 softwerk-edv.de, 1 sogola.com, 1 sogravatas.com.br, 1 @@ -24594,6 +25901,7 @@ soldecom.com, 1 soldout-app.com, 1 sole-erdwaermetauscher.de, 1 soledadpenades.com, 1 +solentbubblesandbounce.co.uk, 1 solfegiator.ch, 1 soli.cafe, 1 solicafe.at, 1 @@ -24602,6 +25910,7 @@ solidshield.com, 1 solidtuesday.com, 1 solidwebnetworks.co.uk, 1 solihullcarnival.co.uk, 1 +solihullinflatables.com, 1 solihulllionsclub.org.uk, 1 solinter.com.br, 1 solipym.net, 1 @@ -24643,6 +25952,7 @@ songsthatsavedyourlife.com, 1 songzhuolun.com, 1 soniafauville.com, 1 sonic.sk, 0 +sonixonline.com, 1 sonja-daniels.com, 1 sonja-kowa.de, 1 sonoecoracao.com.br, 1 @@ -24670,8 +25980,10 @@ sorrowfulunfounded.com, 1 sortaweird.net, 0 soruly.com, 1 sorz.org, 1 +sos-idraulico.it, 1 sos.sk, 0 sosecu.red, 1 +sosoftplay.co.uk, 1 sospromotions.com.au, 1 sostacancun.com, 1 sotadb.info, 1 @@ -24686,6 +25998,7 @@ sougi-review.top, 1 souki.cz, 1 soukodou.jp, 1 soul-source.co.uk, 1 +soulcrazy.org, 1 soulema.com, 1 soulmate.dating, 1 soulogic.com, 0 @@ -24708,6 +26021,7 @@ sourcitec.com, 1 souris.ch, 1 sous-surveillance.net, 1 southafrican.dating, 1 +southambouncycastle.co.uk, 1 southamerican.dating, 1 southbankregister.com.au, 1 southcoastkitesurf.co.uk, 1 @@ -24720,6 +26034,7 @@ southside-crew.com, 1 southside-tuning-day.de, 1 southwaymotors.com, 1 southwestrda.org.uk, 1 +soutien-naissance.com, 1 soved.eu, 1 sowingseasons.com, 1 sowncloud.de, 1 @@ -24727,6 +26042,7 @@ soz6.com, 1 sozai-good.com, 1 sozialy.com, 1 sozon.ca, 1 +sp-sephiroth.jp, 1 sp.com.pl, 1 sp.rw, 1 space-it.de, 1 @@ -24740,6 +26056,7 @@ spacepage.be, 1 spaceweather.live, 1 spaceweatherlive.com, 1 spackova.cz, 1 +spahireleeds.co.uk, 1 spaid.xyz, 1 spam.lol, 1 spamwc.de, 1 @@ -24774,6 +26091,7 @@ speeds.vip, 1 speedsportofhull.co.uk, 1 speedtailors.com, 1 speedtest-russia.com, 1 +speedychat.it, 1 speerpunt.info, 1 speich.net, 1 spek.tech, 1 @@ -24845,6 +26163,7 @@ sporter.com, 1 sportflash.info, 1 sportnesia.com, 1 sportovnidum.cz, 1 +sportressofblogitude.com, 1 sports.dating, 1 sportsmanadvisor.com, 1 sportsmansblog.com, 1 @@ -24875,6 +26194,7 @@ sprueche-zur-konfirmation.de, 1 sps-lehrgang.de, 1 sptk.org, 1 spuffin.com, 1 +spunkt.fr, 1 spur.com.br, 1 sputnik1net.org, 1 spydar007.com, 1 @@ -24917,6 +26237,7 @@ srrdb.com, 1 srroddy.com, 1 srv.so, 1 srvc.io, 1 +srvonfire.com, 1 ss-x.ru, 1 ss.com, 1 ss.lt, 1 @@ -24924,6 +26245,7 @@ ss.lv, 1 ss.ua, 1 ss64.com, 1 ss64.org, 1 +ss88.uk, 1 ssa.gov, 0 ssbkk.ru, 1 ssbrm.ch, 1 @@ -24981,6 +26303,7 @@ stage4.ch, 1 stageirites.com, 1 stageirites.fr, 1 stageirites.org, 1 +stagingjobshq.com, 1 stagstickets.co.uk, 1 stainedglass.net.au, 1 stair.ch, 1 @@ -25009,6 +26332,7 @@ starcafe.me, 1 starcomproj.com, 1 stardanceacademy.net, 1 stardeeps.net, 1 +stardust-entertainments.co.uk, 1 starfm.de, 1 stargarder-jungs.de, 1 stargazer.de, 1 @@ -25016,13 +26340,16 @@ stari.co, 1 starina.ru, 1 starka.st, 1 starkbim.com, 1 +starlightentertainmentdevon.co.uk, 1 starlim.co.in, 1 starlim.org, 1 starpeak.org, 1 +starphotoboothsni.co.uk, 1 starplatinum.jp, 1 starquake.nl, 1 starsam80.net, 1 starstreak.net, 1 +startaninflatablebusiness.com, 1 startlab.sk, 1 startpage.com, 1 startpage.info, 1 @@ -25054,6 +26381,7 @@ stationa.ch, 1 stationary-traveller.eu, 1 stationcharlie.co.za, 1 statistikian.com, 1 +statofus.com, 1 stats.g.doubleclick.net, 1 status2u.com, 1 statusbot.io, 1 @@ -25083,9 +26411,9 @@ steamtrades.com, 1 steborio.pw, 1 steckel.cc, 1 steckregal-super.de, 0 +stedbg.net, 1 steef389.eu, 1 steelephys.com.au, 1 -steem.io, 1 steemit.com, 1 steenackers.be, 1 stefan-bayer.eu, 1 @@ -25135,6 +26463,7 @@ stephsolis.net, 1 stephspace.net, 1 steplogictalent.com, 1 stepsweb.com, 1 +ster-enzo.nl, 1 sterchi-fromages.ch, 1 stereo.lu, 1 stereochro.me, 0 @@ -25171,6 +26500,7 @@ stichtingliab.nl, 1 stichtingscholierenvervoerzeeland.nl, 1 stichtingsticky.nl, 1 stick2bike.de, 1 +stickergiant.com, 1 stickies.io, 1 stickmanventures.com, 1 stickswag.cf, 1 @@ -25192,6 +26522,7 @@ stipsan.me, 1 stirling.co, 1 stirlingpoon.com, 1 stitchfiddle.com, 1 +stivesbouncycastlehire.co.uk, 1 stjohnin.com, 1 stjohnmiami.org, 1 stjohnsc.com, 1 @@ -25199,8 +26530,10 @@ stkeverneparishcouncil.org.uk, 1 stlu.de, 1 stlucasmuseum.org, 1 stlukesbrandon.org, 1 +stm-net.de, 1 stmlearning.com, 1 stmsolutions.pl, 1 +stneotsbouncycastlehire.co.uk, 1 stnl.de, 0 stockpile.com, 1 stockrow.com, 1 @@ -25208,6 +26541,7 @@ stocktrader.com, 1 stodieck.com, 1 stoebermehl.at, 1 stoffelen.nl, 1 +stoffelnet.de, 1 stoianlawfirm.com, 1 stolina.de, 1 stolkpotplanten.nl, 1 @@ -25224,6 +26558,7 @@ stopakwardhandshakes.org, 1 stopbullying.gov, 1 stopfraud.gov, 1 stopthethyroidmadness.com, 1 +stordbatlag.no, 1 store-host.com, 1 store10.de, 1 storedsafe.com, 1 @@ -25279,6 +26614,7 @@ strijkshop.be, 1 stringtoolbox.com, 1 stringvox.com, 1 stripe.com, 1 +striptizer.tk, 1 strm.hu, 1 strobeltobias.de, 1 strobeto.de, 1 @@ -25307,6 +26643,7 @@ studenttenant.com, 1 studer.su, 1 studienportal.eu, 1 studienservice.de, 1 +studio-architetto.com, 1 studio-fotografico.ru, 1 studiodentisticosanmarco.it, 1 studiodewit.nl, 1 @@ -25356,10 +26693,13 @@ stypr.com, 1 su1ph3r.io, 1 suareforma.com, 1 suave.io, 1 +sub-net.at, 1 +sub.media, 1 subastasdecarros.net, 1 subdev.org, 1 sublevel.net, 0 sublimebits.com, 1 +submedia.tv, 1 submelon.tech, 1 subohm.com, 1 suborbital.io, 1 @@ -25409,7 +26749,6 @@ sundaycooks.com, 1 sundayfundayjapan.com, 1 suneilpatel.com, 1 sunfireshop.com.br, 1 -sunflyer.cn, 0 sunfox.cz, 1 sunfulong.me, 1 sungo.wtf, 1 @@ -25419,13 +26758,21 @@ sunsetwx.com, 1 sunshinesf.org, 1 sunsmartresorts.com, 1 sunstar.bg, 1 +sunxchina.com, 1 supa.sexy, 1 supastuds.com, 1 super-o-blog.com, 1 superbart.nl, 1 +superbouncebouncycastles.com, 1 superbowlkneel.com, 1 superbshare.com, 1 supercalorias.com, 1 +supercastlesadelaide.com.au, 1 +supercastlesbrisbane.com.au, 1 +supercastlesmelbourne.com.au, 1 +supercastlessouthsydney.com.au, 1 +supercastlessunshinecoast.com.au, 1 +supercastlessydney.com.au, 1 supercentenarian.com, 1 supercinebattle.fr, 1 superguide.com.au, 1 @@ -25438,8 +26785,10 @@ supernovabrasil.com.br, 1 supernt.lt, 1 superpase.com, 1 supersahnetorten.de, 1 +supersole.net, 1 supersonnig-festival.de, 1 supersonnigfestival.de, 1 +supersteosbouncycastles.com, 1 supersu.kr, 1 superswingtrainer.com, 1 supertasker.org, 1 @@ -25478,6 +26827,7 @@ susastudentenjobs.de, 1 susc.org.uk, 1 susconam.org, 1 sush.us, 1 +sushi.roma.it, 1 sushi101tempe.com, 0 sushifrick.de, 1 sushikatze.de, 1 @@ -25490,6 +26840,7 @@ sustainability.gov, 1 sustainabilityknowledgegroup.com, 1 sustsol.com, 1 sutas.market, 1 +suttonbouncycastles.co.uk, 1 suuria.de, 1 suvidhaapay.com, 1 suwalls.com, 1 @@ -25500,6 +26851,7 @@ sv-turm-hohenlimburg.de, 1 sv.search.yahoo.com, 0 svadobkajuvi.sk, 1 svager.cz, 1 +svantner.sk, 1 svarnyjunak.cz, 1 svarovani.tk, 1 svc-sitec.com, 1 @@ -25525,6 +26877,7 @@ sw-servers.net, 1 sw33tp34.com, 1 swaggerdile.com, 1 swansdoor.org, 1 +swanseapartyhire.co.uk, 1 swapadoodle.com, 1 swarfarm.com, 1 swarlys-server.de, 1 @@ -25543,6 +26896,7 @@ sweetll.me, 0 sweetvanilla.jp, 1 swehack.org, 1 sweharris.org, 1 +swfmax.com, 1 swift-devedge.de, 1 swiftconf.com, 1 swiftqueue.com, 1 @@ -25611,6 +26965,7 @@ syncrise.co.jp, 1 syndic-discount.fr, 0 syneart.com, 1 synecek11.cz, 1 +synergisticsoccer.com, 1 synergyflare.com, 1 synergyworkingdogclub.com, 1 synfin.org, 1 @@ -25667,8 +27022,8 @@ t12u.com, 1 t2000headphones.com, 1 t2000laserpointers.com, 1 t23m-navi.jp, 0 -t2i.nl, 1 t3rror.net, 1 +t47.io, 1 t7e.de, 0 ta-65.com, 1 ta-sports.net, 1 @@ -25771,6 +27126,7 @@ tanz.info, 1 tanzhijun.com, 1 taoburee.com, 1 tapestries.tk, 1 +taqsim.jp, 1 taquilla.com, 1 taqun.club, 1 tarantul.org.ua, 1 @@ -25808,7 +27164,6 @@ tattvaayoga.com, 1 tavolaquadrada.com.br, 1 tavsys.net, 1 taxaroo.com, 1 -taxi-24std.de, 1 taxi-chamonix.fr, 1 taxi-collectif.ch, 1 taxicollectif.ch, 1 @@ -25821,6 +27176,7 @@ taxmadras.com, 1 taxspeaker.com, 1 taxsquirrel.com, 1 taylorpearson.me, 0 +taylors-castles.co.uk, 1 taysonvodao.fr, 1 tazemama.biz, 1 tazj.in, 0 @@ -25832,6 +27188,7 @@ tbonejs.org, 1 tbrindus.ca, 1 tbrss.com, 1 tbs-certificates.co.uk, 1 +tbtech.cz, 1 tbuchloh.de, 1 tc-st-leonard.ch, 1 tc.nz, 1 @@ -25853,6 +27210,7 @@ tdrcartuchos.com.br, 1 tdrs.info, 1 tdsb.cf, 1 tdsbhack.tk, 1 +tdsinflatables.co.uk, 1 tdude.co, 1 teabagdesign.co.uk, 1 teachercreatedmaterials.com, 1 @@ -25871,6 +27229,7 @@ team-azerty.com, 1 team-bbd.com, 1 team-pancake.eu, 1 team3482.com, 1 +teamassists.com, 1 teambeam.at, 1 teambeam.ch, 1 teambeam.com, 1 @@ -25963,6 +27322,8 @@ techunit.org, 1 techvalue.gr, 1 techwayz.com, 1 techwords.io, 1 +tecit.ch, 1 +tecne.ws, 1 tecnoarea.com.ar, 1 tecnobrasilloja.com.br, 1 tecnodritte.it, 1 @@ -26022,9 +27383,11 @@ telly.site, 1 teloo.pl, 1 telos-analytics.com, 1 telugu4u.net, 1 +temasa.net, 1 temizmama.com, 1 temp.pm, 1 tempdomain.ml, 1 +template-parks.com, 1 templateinvaders.com, 1 temptraining.ru, 0 tenable.com.au, 1 @@ -26032,6 +27395,7 @@ tenberg.com, 1 tenbos.ch, 1 tendermaster.com.ua, 1 tenderstem.co.uk, 1 +tendomag.com, 1 tendoryu-aikido.org, 1 tenenz.com, 1 tengu.cloud, 1 @@ -26063,6 +27427,7 @@ terlindung.com, 1 terminalvelocity.co.nz, 1 termitemounds.org, 1 termitinitus.org, 1 +terra-x.net, 1 terrab.de, 0 terracloud.de, 0 terraelectronica.ru, 1 @@ -26111,8 +27476,10 @@ teuniz.nl, 1 teunstuinposters.nl, 0 teva-li.com, 1 tewarilab.co.uk, 1 +tewkesburybouncycastles.co.uk, 1 texasllcpros.com, 1 texastwostepdivorce.com, 1 +texasvolunteerattorneys.org, 1 texby.com, 1 texhnolyze.net, 1 text-shirt.com, 1 @@ -26132,6 +27499,7 @@ tezcam.tk, 1 tf-network.de, 1 tf2b.com, 1 tf2calculator.com, 1 +tfg-bouncycastles.com, 1 tfle.xyz, 1 tflite.com, 1 tfnapps.de, 1 @@ -26190,13 +27558,15 @@ the-webmaster.com, 1 the-zenti.de, 1 the.ie, 1 the2f.de, 1 +the3musketeers.biz, 1 theankhlife.com, 1 -theavenuegallery.com, 1 thebakers.com.br, 1 thebakingclass.com, 1 thebasebk.org, 1 +thebcm.co.uk, 1 thebeautifulmusic.net, 1 thebest.ch, 1 +thebestfun.co.uk, 1 thebestsavingsplan.com, 1 thebigbitch.nl, 1 thebigdatacompany.com, 1 @@ -26205,6 +27575,8 @@ thebikeinsurer.co.uk, 1 thebimhub.com, 1 theblackknightsings.com, 1 thebodyprinciple.com, 1 +thebouncedepartment.co.uk, 1 +thebouncyman.co.uk, 1 theboxofcarlos.com, 1 thebreakhotel.com, 1 thebreakroom.org, 1 @@ -26242,6 +27614,7 @@ thediaryofadam.com, 1 thedisc.nl, 1 thediscovine.com, 1 thedocumentrefinery.com, 1 +thedominatorsclan.com, 1 thedreamtravelgroup.co.uk, 1 thedrinks.co, 1 thedronechart.com, 1 @@ -26259,8 +27632,11 @@ thefnafarchive.org, 1 thefox.co, 1 thefox.com.fr, 1 thefrk.pw, 1 +thefrk.xyz, 1 +thefunfirm.co.uk, 1 thegamerscamp.com, 1 thegarrowcompany.com, 1 +thegeekdiary.com, 1 thegioinano.com, 1 thegraciousgourmet.com, 1 thegrape.ro, 1 @@ -26271,11 +27647,14 @@ thegreens.us, 1 thegvoffice.net, 1 thegym.org, 1 thehackerblog.com, 1 +thehaxbys.co.uk, 1 thehiddenbay.cc, 1 thehiddenbay.info, 1 thehivedesign.org, 1 thehookup.be, 1 theidiotboard.com, 1 +theinflatables-ni.co.uk, 1 +theinflatablesne.co.uk, 1 theinitium.com, 1 theintercept.com, 1 theinternationalgeekconspiracy.eu, 1 @@ -26294,6 +27673,7 @@ thelinuxspace.com, 1 thelinuxtree.net, 1 thelittlecraft.com, 1 thelocals.ru, 1 +thelonelyones.co.uk, 1 thelostyankee.com, 1 themacoaching.nl, 1 themarshallproject.org, 1 @@ -26333,6 +27713,7 @@ theosophie-afrique.org, 1 theoutline.com, 1 thepaffy.de, 1 thepartner.co.uk, 1 +thepartydoctors.co.uk, 1 thepasteb.in, 1 thepathsofdiscovery.com, 1 thepaulagcompany.com, 1 @@ -26342,8 +27723,11 @@ thepeninsulaires.com, 1 thephonecaseplace.com, 1 thephp.cc, 1 thepiabo.ovh, 1 +thepieslicer.com, 1 thepiratesociety.org, 1 theplasticsurgerycenterofnashville.com, 1 +theplaydaysbus.co.uk, 1 +theplayspot.co.uk, 1 theploughharborne.co.uk, 1 theposhfudgecompany.co.uk, 1 thepostoffice.ro, 1 @@ -26366,6 +27750,7 @@ thermolamina.nl, 1 therockawaysny.com, 1 theroks.com, 1 theroyalmarinescharity.org.uk, 1 +theruizes.com, 1 theruleslawyer.net, 1 therumfordcitizen.com, 1 thesalonthing.com, 1 @@ -26390,6 +27775,7 @@ theshine.pl, 1 thesignalco.com.au, 1 thesisgeek.com, 1 thesishelp.net, 1 +theskingym.co.uk, 1 thesled.net, 1 thesocialmediacentral.com, 1 thesteins.org, 1 @@ -26399,6 +27785,7 @@ thestoryshack.com, 1 thestrategyagency.com.au, 1 thesuppercircle.com, 1 theswissbay.ch, 1 +thetapirsmouth.com, 1 thetechnical.me, 1 thetenscrolls.com, 1 thetomharling.com, 1 @@ -26409,6 +27796,7 @@ theunitedstates.io, 1 thevalentineconstitution.com, 1 thevgg.com, 1 thewebflash.com, 1 +thewebsitedoctors.co.uk, 1 thewebsitemarketingagency.com, 1 thewhitehat.club, 1 thewhiterabbit.space, 1 @@ -26416,6 +27804,7 @@ thewhitneypaige.com, 1 thewindow.com, 1 thewoodkid.com.au, 1 theworldsend.eu, 1 +thexfactorgames.com, 1 thexme.de, 1 theyarnhookup.com, 0 theyear199x.org, 1 @@ -26435,6 +27824,7 @@ thinkcash.nl, 1 thinkheaddesign.com, 1 thinkindifferent.net, 1 thinkingandcomputing.com, 1 +thinkingplanet.net, 1 thinklikeanentrepreneur.com, 1 thinkquality.nl, 1 thinkrealty.com, 1 @@ -26482,6 +27872,7 @@ thorbis.com, 1 thorbiswebsitedesign.com, 1 thorsten-schaefer.com, 1 thorstenschaefer.name, 1 +thosci.com, 1 thot.space, 1 thoughtlessleaders.online, 1 thoughtsynth.com, 1 @@ -26515,6 +27906,7 @@ thuthuatios.com, 1 thuviensoft.com, 1 thuviensoft.net, 1 thw-bernburg.de, 1 +thxandbye.de, 1 thyngster.com, 1 thynx.io, 1 ti-js.com, 1 @@ -26534,12 +27926,14 @@ ticfleet.com, 1 ticketluck.com, 1 ticketmates.com.au, 1 ticketoplichting.nl, 1 +ticketpro.ca, 1 ticketslover.com, 1 ticketsmate.com, 1 ticketsource.co.uk, 1 ticketsource.eu, 1 ticketsource.us, 1 ticketsourcebeta.co.uk, 1 +ticketsvergleichen.de, 1 tickit.ca, 1 tid.jp, 1 tidycustoms.net, 1 @@ -26556,6 +27950,7 @@ tiffanytravels.com, 1 tiffnix.com, 1 tigerchef.com, 1 tigerdile.com, 1 +tiggeriffic.com, 1 tijden.nu, 1 tijo.ch, 1 tik.edu.ee, 1 @@ -26567,9 +27962,11 @@ tiliaze.info, 1 tiliaze.net, 1 till.im, 1 tillberg.us, 1 +tilleysbouncycastles.co.uk, 1 tillseasyscore.com, 1 tiltedwindmillcrafts.com, 1 timbarlotta.com, 1 +timberkel.com, 1 timbishopartist.com, 1 timco.cloud, 1 timdebruijn.nl, 1 @@ -26618,6 +28015,7 @@ tinylan.com, 1 tinyspeck.com, 1 tinyssh.com, 1 tinyssh.org, 1 +tinytownsoftplay.co.uk, 1 tinyvpn.net, 1 tinyvpn.org, 1 tioat.net, 1 @@ -26647,9 +28045,11 @@ titusetcompagnies.net, 1 tivido.nl, 1 tjandpals.com, 1 tjenestetorvet.dk, 1 +tjkcastles.uk, 1 tjl.rocks, 1 tjp.ch, 1 tjs.me, 1 +tjsbouncycastles.co.uk, 1 tkacz.pro, 1 tkarstens.de, 0 tkat.ch, 1 @@ -26678,7 +28078,9 @@ tmberg.ga, 1 tmberg.gq, 1 tmberg.ml, 1 tmberg.tk, 1 +tmc.com.mt, 1 tmconnects.com, 1 +tmcpromotions.co.uk, 1 tmcreationweb.com, 1 tmdb.biz, 1 tmf.ru, 1 @@ -26746,6 +28148,7 @@ tofilmhub.com, 1 togech.jp, 1 togetter.com, 1 toheb.de, 1 +tohokinemakan.tk, 1 tojeto.eu, 1 toka.sg, 1 tokage.me, 1 @@ -26758,10 +28161,14 @@ tokic.hr, 1 tokio.fi, 1 tokke.dk, 1 tokkee.org, 1 +tokobungaasryflorist.com, 1 tokobungadijambi.com, 1 +tokobungadilampung.com, 1 +tokobungadipadangflorist.com, 1 tokoindo.top, 1 tokototech.com, 1 tokumei.co, 1 +tokyo-onkyo.jp, 1 tokyo-powerstation.com, 1 tokyo.dating, 1 tokyomakino.com, 1 @@ -26805,6 +28212,7 @@ tommic.eu, 1 tommounsey.com, 1 tomnatt.com, 1 tomo.gr, 0 +tomochun.net, 1 tomrei.com, 1 tomrichards.net, 1 tomschlick.com, 1 @@ -26869,13 +28277,18 @@ topaxi.ch, 1 topaxi.codes, 1 topbargains.com.au, 0 topbestsellerproduct.com, 1 +topbounce.com, 1 +topbouncycastles.co.uk, 1 topbrakes.com, 1 +topclassfun.ie, 1 topdesk.net, 1 topdetoxcleanse.com, 1 topdevbox.net, 1 +topdogsinflatables.co.uk, 1 topeng-emas.com, 1 topfivepercent.co.uk, 1 topicit.net, 1 +topirishcasinos.com, 1 topjobs.ch, 1 toplist.eu, 1 topnotchendings.com, 1 @@ -26888,6 +28301,7 @@ topspeedgolf.com, 0 toptec.net.br, 1 toptenthebest.com, 1 toptexture.com, 1 +toptheto.com, 1 topwin.la, 1 topyx.com, 1 tor2web.org, 1 @@ -26930,6 +28344,8 @@ totalforcegym.com, 1 totalhomecareinc.com, 1 totallylegitimatehosting.ru, 1 totallynotaserver.com, 1 +totalpahire.com, 1 +totalparts.com.au, 1 totalprint.hu, 1 totalsystemcare.com, 1 totaltriathlon.com, 1 @@ -26956,6 +28372,7 @@ toursandtransfers.it, 1 tourtransferitaly.it, 1 tous-travaux.ch, 1 toushi-exe.com, 1 +toushi-return.xyz, 1 touslesdrivers.com, 1 tousproducteurs.fr, 1 tout-art.ch, 1 @@ -26986,6 +28403,7 @@ tpbunblocked.org, 1 tpidg.us, 1 tpolemis.com, 1 tpp.chat, 1 +tppdebate.org, 1 tppleague.me, 0 tqdev.com, 1 tr.search.yahoo.com, 0 @@ -27005,9 +28423,9 @@ tracetracker.no, 1 track.plus, 1 trackchair.com, 1 trackdays4fun.com, 1 +trackdomains.com, 1 trackersimulator.org, 1 trackeye.dk, 1 -trackmeet.io, 1 trackrecordpro.co.uk, 1 tractorpumps.com, 1 trade.gov.uk, 1 @@ -27025,9 +28443,13 @@ traditionsvivantesenimages.ch, 1 tradiz.org, 1 traeningsprojekt.dk, 1 trafarm.ro, 1 +traffic.az, 1 trafficmanager.xxx, 1 trafficologyblueprint.com, 1 +trafficpixel.tk, 1 +traffictigers.com, 1 traffixdevices.com, 1 +traforet.win, 1 tragmi.ch, 1 trailerparty.com, 1 trailforks.com, 1 @@ -27090,6 +28512,7 @@ translatoruk.co.uk, 1 transmarttouring.com, 1 transmisjeonline.pl, 1 transmithe.net, 1 +transnexus.com, 1 transparentcorp.com, 1 transport.eu, 1 transporterlock.com, 1 @@ -27097,6 +28520,7 @@ transsexualpantyhose.com, 1 transverify.com, 1 trashnothing.com, 1 trask.no, 1 +traslocare.roma.it, 1 trauertexte.info, 1 traumhuetten.de, 1 traut.cloud, 1 @@ -27125,6 +28549,7 @@ treasuryhunt.gov, 1 treasuryscams.gov, 1 treebaglia.xyz, 1 treehousebydesign.com, 1 +treehouseresort.nl, 1 trees.chat, 1 treeschat.com, 1 trefcon.cz, 1 @@ -27154,6 +28579,7 @@ triage.com, 1 triageo.com.au, 1 trialcentralnet.com, 1 trialmock.com, 1 +trianglecastles.co.uk, 1 tribaldos.com, 1 tribut.de, 1 tributh.net, 1 @@ -27184,11 +28610,13 @@ trisportas.lt, 1 tristanfarkas.one, 1 trixati.org.ua, 1 trixexpressweb.nl, 1 +trizone.com.au, 1 trkpuls.tk, 1 trockendock.ch, 1 troedel-trolle.de, 1 troedelhannes.at, 1 troianet.com.br, 1 +troisdorf-gestalten.de, 1 trollingeffects.org, 1 trollmoa.se, 1 trommelwirbel.com, 1 @@ -27236,6 +28664,7 @@ tryfabulousskinserum.com, 1 tryhard.cz, 1 trymegadrol.com, 1 trynowrinkleseyeserum.com, 1 +tryupdates.com, 1 trywesayyes.com, 1 trzepak.pl, 1 ts-publishers.com, 1 @@ -27283,6 +28712,7 @@ tube.tools, 1 tubejack.nl, 1 tubeju.com, 1 tuberecht.de, 1 +tubs4fun.co.uk, 1 tubul.net, 1 tucidi.net, 1 tucnak.eu, 1 @@ -27299,8 +28729,10 @@ tuitle.com, 1 tuja.hu, 1 tulsameetingroom.com, 1 tumagiri.net, 1 +tumblenfun.com, 1 tumedico.es, 1 tumelum.de, 1 +tuminauskas.lt, 1 tumutanzi.com, 1 tunefish-entertainment.de, 1 tuner.cloud, 1 @@ -27312,6 +28744,7 @@ tuntitili.fi, 1 tupa-germania.ru, 1 tupeuxpastest.ch, 1 tupizm.com, 1 +tuppenceworth.ie, 1 turbobit.ch, 1 turigum.com, 1 turismo.cl, 1 @@ -27326,7 +28759,9 @@ tursiae.org, 1 turtle.ai, 1 turtleduckstudios.com, 1 turtlepwr.com, 1 +turtles.ga, 1 tutanota.com, 1 +tuthowto.com, 1 tutiendaroja.com, 1 tutiendarosa.com, 1 tuto-craft.com, 1 @@ -27336,6 +28771,7 @@ tutorio.ga, 1 tuts4you.com, 1 tuttimundi.org, 1 tuttoandroid.net, 1 +tuvangoicuoc.com, 1 tuxcloud.net, 1 tuxflow.de, 1 tuxgeo.com, 0 @@ -27352,8 +28788,10 @@ tvc.red, 1 tvcal.net, 1 tvcmarketing.com, 1 tver-msk.ru, 1 +tverdohleb.com, 1 tverskaya-outlet.ru, 1 tvoru.com.ua, 1 +tvs-virtual.cz, 1 tvsheerenhoek.nl, 1 tw.search.yahoo.com, 0 twaka.com, 1 @@ -27384,6 +28822,7 @@ twittelzie.nl, 1 twitter.ax, 1 twitter.com, 0 twitteroauth.com, 1 +twizzkidzinflatables.co.uk, 1 twlan.org, 1 twodadsgames.com, 1 twofactorauth.org, 1 @@ -27400,6 +28839,7 @@ txcp01.com, 1 txcp02.com, 1 txdivorce.org, 1 txi.su, 1 +txlrs.org, 1 txm.pl, 1 tyche.io, 1 tyil.nl, 1 @@ -27515,6 +28955,7 @@ ukhas.net, 1 ukhillwalking.com, 1 ukkeyholdingcompany.co.uk, 1 ukmeetandgreet.com, 1 +ukmortgagecompare.co.uk, 1 ukooku.com, 1 ukozliku.cz, 1 ukpirate.org, 1 @@ -27528,6 +28969,7 @@ uli-eckhardt.de, 1 ullah.se, 1 ulmer-schneesport.de, 0 ulrik.moe, 1 +ultima-ratio.at, 1 ultimateanu.com, 1 ultimatemafia.net, 1 ultratechlp.com, 1 @@ -27539,6 +28981,7 @@ umkmjogja.com, 1 umsapi.com, 1 un-zero-un.fr, 1 unapp.me, 1 +unbelievableplaces.de, 1 unblockall.xyz, 1 unblocked.at, 1 unblocked.bet, 1 @@ -27559,6 +29002,7 @@ uncensoreddns.dk, 1 uncensoreddns.org, 1 undeadbrains.de, 1 undecidable.de, 1 +underbridgeleisure.co.uk, 1 undercovercondoms.co.uk, 1 undercovercondoms.com, 1 underlined.fr, 1 @@ -27610,6 +29054,7 @@ unila.edu.br, 1 unionplat.ru, 1 uniprimebr.com.br, 1 uniq.site, 1 +unique-bouncy-castles.co.uk, 1 unique-pathways.ch, 1 unique-pathways.com, 1 uniquepathways.ch, 1 @@ -27628,6 +29073,7 @@ univercite.ch, 1 universal-happiness.com, 1 universalcarremote.com, 1 universalpaymentgateway.com, 1 +universeinform.com, 1 universogay.com, 1 univitale.fr, 1 unix.se, 1 @@ -27643,6 +29089,7 @@ unlockboot.com, 0 unlocken.nl, 1 unmonito.red, 1 uno-pizza.ru, 1 +unobrindes.com.br, 1 unoccupyabq.org, 1 unpkg.com, 1 unpossible.xyz, 1 @@ -27666,6 +29113,7 @@ untoldstory.eu, 1 unun.fi, 1 unusualhatclub.com, 1 unveiledgnosis.com, 1 +unworthy.ml, 1 unx.dk, 1 unxicdellum.cat, 1 upandclear.org, 1 @@ -27714,7 +29162,6 @@ urbanietz-immobilien.de, 1 urbanmelbourne.info, 1 urbannewsservice.com, 1 urbansparrow.in, 1 -urbanstylestaging.com, 1 urbanwildlifealliance.org, 1 urbexdk.nl, 1 urcentral.com, 1 @@ -27746,9 +29193,11 @@ usajobs.gov, 1 usakitchensandflooring.com, 1 usap.gov, 0 usbcraft.com, 1 +usbevents.co.uk, 1 uscloud.nl, 1 uscp8.com, 1 usd.de, 1 +usds.gov, 1 use.be, 1 usebean.com, 1 usedesk.ru, 1 @@ -27770,6 +29219,7 @@ usr.nz, 1 ussm.gov, 1 ussuka.com, 1 ust.space, 1 +usualbeings.com, 1 uswitch.com, 1 ut-addicted.com, 1 utahlocal.net, 1 @@ -27794,6 +29244,7 @@ utugnn.ru, 1 utw.me, 1 uuit.nl, 1 uvocorp.com, 1 +uwac.co.uk, 1 uwesander.de, 1 uwfreelanceopticien.nl, 1 uwimonacs.org.jm, 1 @@ -27803,6 +29254,8 @@ uygindir.ml, 1 uz.search.yahoo.com, 0 uzaymedya.com.tr, 1 v-d-p.net, 1 +v-desk.ga, 1 +v-tek.fi, 1 v-u-z.ru, 1 v12.co.uk, 1 v1sit0r.ru, 1 @@ -27840,6 +29293,7 @@ valenciadevops.me, 1 valenhub.com, 1 valenhub.es, 1 valentin-sundermann.de, 1 +valentinberclaz.com, 1 valentineapparel.com, 1 valentineforpresident.com, 1 valentinera.in, 1 @@ -27924,10 +29378,12 @@ varta.io, 1 varunagw.com, 0 varunpriolkar.com, 1 varvy.com, 1 +vascomm.co.id, 1 vashel.us, 1 vasileruscior.ro, 1 vaskulitis-info.de, 1 vasports.com.au, 1 +vastgoedcultuurfonds.nl, 1 vasyharan.com, 1 vat-eu.com, 1 vatelecom.dk, 1 @@ -28021,6 +29477,7 @@ verhovs.ky, 1 verifiedinvesting.com, 1 verifyos.com, 1 veriny.tf, 1 +veriomed.com, 1 veritafineviolins.com, 1 verizonguidelines.com, 1 verliebt-in-bw.de, 1 @@ -28058,6 +29515,7 @@ veslosada.com, 1 vespacascadia.com, 1 veterinario.roma.it, 1 vetforum.co, 1 +vethouse.com.ua, 1 vetinte.eu, 1 vetofish.com, 1 vets.gov, 1 @@ -28095,6 +29553,7 @@ victoriastudio.ru, 1 victoriaville.ca, 1 victorjacobs.com, 1 victornet.de, 1 +victornilsson.pw, 1 vicyu.com, 1 vid-immobilien.de, 1 vid.me, 1 @@ -28155,13 +29614,13 @@ villa-romantica-zillertal.at, 1 villafiore.com.br, 1 villageunique.com.br, 1 villainsclothing.com.au, 1 -villasenor.online, 1 villasfinistere.fr, 1 villasforsale-bali.com, 1 villek.fi, 1 villenavedornon.fr, 1 vilog.me, 1 vima.ch, 1 +vimeo.com, 1 vimeosucks.nyc, 1 vinagro.sk, 1 vinarstvimodryhrozen.cz, 1 @@ -28183,6 +29642,7 @@ vintageportgifts.co.uk, 1 vintagetrailerbuyers.com, 1 vintazh.net, 1 vinticom.ch, 1 +vintock.com, 1 vinyculture.com, 1 vinzite.com, 1 violetraven.co.uk, 1 @@ -28192,12 +29652,14 @@ viosey.com, 1 vipi.es, 1 viplentes.com.br, 1 viptamin.eu, 1 +viptamol.com, 1 vir-tec.eu, 1 viralboombox.xyz, 1 viralpop.it, 1 virgopolymer.com, 1 virial.de, 1 viridis-milites.cz, 1 +virtualcustoms.tech, 1 virtualdesignmedia.com, 0 virtuallifestyle.nl, 1 virtualmt2.pl, 1 @@ -28258,6 +29720,7 @@ vivatv.com.tw, 1 vivendi.de, 1 vivianmaier.cn, 1 vivid-academy.com, 1 +vividinflatables.co.uk, 1 vividlumen.com, 1 viviennevandenbos.nl, 1 vivirenelmundo.com, 1 @@ -28267,6 +29730,7 @@ vizards.cc, 1 vizzboard.com, 1 vk4wip.org.au, 1 vkennke.org, 1 +vkino.com, 1 vkirichenko.name, 1 vkox.com, 1 vksportphoto.com, 1 @@ -28285,6 +29749,7 @@ vm-co.ch, 1 vmc.co.id, 1 vmem.jp, 0 vmgirls.com, 1 +vmhydro.ru, 1 vmis.nl, 1 vmoagents.com, 0 vmug.pl, 1 @@ -28299,7 +29764,6 @@ vocalviews.com, 1 vodpay.com, 1 vodpay.net, 1 vodpay.org, 1 -vogler.name, 1 vogt.tech, 1 voice-of-design.com, 1 voicu.ch, 1 @@ -28328,7 +29792,6 @@ volkswurst.de, 1 voloevents.com, 1 voltimax.com, 1 volto.io, 1 -voltotc.com, 1 vomitb.in, 1 vonauw.com, 1 vonborstelboerner.de, 1 @@ -28359,6 +29822,7 @@ votoot.com, 1 votre-site-internet.ch, 1 votresiteweb.ch, 1 vow.vn, 1 +vowsy.club, 1 voxfilmeonline.net, 1 voxml.com, 1 voxographe.com, 0 @@ -28485,11 +29949,18 @@ wallethub.com, 0 walletnames.com, 1 wallingford.cc, 1 wallpapers.pub, 1 +walls.de, 1 walls.io, 1 walnutgaming.com, 1 walnutis.net, 1 walruses.org, 1 wanashi.com, 1 +wanda76.com, 1 +wanda78.com, 1 +wanda79.com, 1 +wanda96.com, 1 +wanda97.com, 1 +wanda98.com, 1 wander.al, 1 wandercue.com, 1 wandervoll.ch, 1 @@ -28502,8 +29973,10 @@ wangqr.tk, 1 wangyue.blog, 1 wantshow.com.br, 1 wanybug.cn, 1 +waonui.io, 1 wapking.live, 1 wardow.com, 1 +warebouncycastles.co.uk, 1 warekon.com, 1 warekon.dk, 1 warenits.at, 1 @@ -28517,6 +29990,7 @@ warmservers.com, 1 warp-radio.com, 1 warp-radio.tv, 1 warr.ath.cx, 1 +warringtonkidsbouncycastles.co.uk, 1 warschild.org, 1 wartorngalaxy.com, 1 warumsuchen.at, 1 @@ -28548,7 +30022,6 @@ watermonitor.gov, 1 watersb.org, 1 watertrails.io, 1 watsonwork.me, 1 -wattechweb.com, 1 wave-ola.es, 1 wavesboardshop.com, 1 wavesoftime.com, 1 @@ -28569,8 +30042,12 @@ wbuntu.com, 1 wbvb.nl, 1 wbx.support, 1 wcbook.ru, 1 +wd627.com, 1 +wd976.com, 1 +wdbflowersevents.co.uk, 1 wdbgroup.co.uk, 1 wdesk.com, 1 +wdmg.com.ua, 1 wdrl.info, 1 wdt.cz, 0 wdt.io, 1 @@ -28619,6 +30096,7 @@ webbiz.co.uk, 1 webbson.net, 1 webbx.se, 1 webcamtoy.com, 1 +webcatchers.nl, 1 webcatechism.com, 1 webclimbers.ch, 1 webcollect.org.uk, 1 @@ -28628,6 +30106,7 @@ webcrm.com, 1 webdesign-st.de, 1 webdesigneauclaire.com, 1 webdesignplay.com, 1 +webdev-quiz.de, 1 webdevops.io, 1 webdosh.com, 1 webduck.nl, 1 @@ -28645,6 +30124,7 @@ webhackspro.com, 1 webhelyesarcu.hu, 1 webhostplan.info, 1 webinnovation.ie, 1 +webjobposting.com, 1 webkeks.org, 1 weblagring.se, 1 weblate.org, 1 @@ -28671,7 +30151,9 @@ webneuch.info, 1 webneuch.swiss, 1 webnoob.net, 1 webogram.org, 0 +webpostingmart.com, 1 webpostingpro.com, 1 +webpostingreviews.com, 1 webproguru.com, 1 webproject.rocks, 1 webproxy.pw, 1 @@ -28681,6 +30163,7 @@ webrentcars.com, 1 webreport.fr, 1 webreslist.com, 1 webs4all.ro, 0 +websandbox.uk, 1 websectools.com, 1 websecurity.is, 1 webseitendesigner.com, 0 @@ -28690,6 +30173,8 @@ websharks.org, 1 websiteadvice.com.au, 0 websitedesign.bg, 1 websiteforlease.ca, 1 +websiteout.ca, 1 +websiteout.net, 1 websites4business.ca, 1 websitesdallas.com, 1 websiteservice.pro, 1 @@ -28718,9 +30203,11 @@ webwolf.co.za, 1 webyazilimankara.com, 1 webzanem.com, 1 wecanvisit.com, 1 +wecleanbins.com, 1 wecobble.com, 1 wedding-m.jp, 1 weddingfantasy.ru, 1 +weddingsbynoon.co.uk, 1 weddywood.ru, 1 wedos.com, 1 weeblr.com, 1 @@ -28739,6 +30226,7 @@ weerda.fr, 1 weerstationgiethoorn.nl, 1 weerstatistieken.nl, 1 wefinanceinc.com, 1 +wefitboilers.com, 1 weggeweest.nl, 1 wegner.no, 1 wegvielfalt.de, 1 @@ -28748,6 +30236,7 @@ weicn.org, 1 weideheuvel.org, 1 weidmannfibertechnology.com, 1 weigelia.nl, 1 +weightreviews.com, 1 weiler.xyz, 1 weils.net, 1 weimaraner.com.br, 1 @@ -28806,6 +30295,7 @@ werally.com, 1 werbefotograf-leitner.de, 1 werbefotografie-leitner.de, 1 werbewelt-tv.de, 1 +werbik.at, 1 werehub.org, 1 wereldkoffie.eu, 1 wereldplanner.nl, 1 @@ -28814,6 +30304,7 @@ werk-34.de, 1 werkemotion.com, 1 werken-bij-inwork.nl, 1 werkenbijdfzs.nl, 1 +werkgroepderdewereld.nl, 1 werkinc.de, 1 werkkrew.xyz, 1 werkstattkinder.de, 1 @@ -28829,11 +30320,13 @@ wesecom.com, 1 wesell.asia, 1 weserv.nl, 1 wesleycabus.be, 1 +wespeakgeek.co.za, 1 wesreportportal.com, 1 wessner.org, 1 west-wind.net, 1 westcarrollton.org, 1 westcentenaryscouts.org.au, 1 +westcoastcastles.com, 1 westcountrystalking.com, 1 westendwifi.net, 1 westeros.hu, 1 @@ -28841,13 +30334,17 @@ westhighlandwhiteterrier.com.br, 1 westlights.net, 1 westmead.org, 1 westmeadapartments.com.au, 1 +westmidlandsbouncycastlehire.co.uk, 1 +westmidlandsinflatables.co.uk, 1 westsuburbanbank.com, 1 westtulsa.com, 1 +westwood.no, 1 wetherbymethodist.org.uk, 1 wetherbyweather.org.uk, 1 wetofu.top, 1 wetthost.com, 1 wevenues.com, 1 +wexfordbouncycastles.ie, 1 weyland-yutani.org, 1 weyland.tech, 1 wf-bigsky-master.appspot.com, 1 @@ -28881,6 +30378,7 @@ whd-guide.de, 1 wheatgra.in, 1 wheatley.nl, 1 wheeler.kiwi.nz, 1 +wheelwide.co.uk, 1 wheelwork.org, 1 wheelwright.org, 1 when-release.com, 1 @@ -28918,6 +30416,7 @@ whitehouse.gov, 1 whiteink.com, 1 whitejaguars.com, 1 whitelabelcashback.nl, 1 +whitelabeltickets.com, 1 whitepharmacy.co.uk, 1 whiteroom.agency, 1 whiteshadowimperium.com, 1 @@ -28925,12 +30424,14 @@ whitewinterwolf.com, 1 whitkirkartsguild.com, 1 whitkirkchurch.org.uk, 1 whitworth.nyc, 1 +whizzzbang.co.uk, 1 whmcs.hosting, 1 who-calledme.com, 1 who.pm, 1 whocalld.com, 1 whocalled.us, 1 whoisthenightking.com, 1 +wholelotofbounce.co.uk, 1 wholesalecbd.com, 1 wholesomeharvestbread.com, 1 wholikes.us, 1 @@ -28953,6 +30454,7 @@ widegab.com, 1 wideinfo.org, 1 widemann.de, 1 widememory.com, 1 +widenews.org, 1 widmer.bz, 1 widsl.de, 1 wiebetaaltdat.nl, 1 @@ -28990,6 +30492,7 @@ wikipedia.org, 1 wikiquote.org, 1 wikisource.org, 1 wikiversity.org, 1 +wikivisually.com, 1 wikivoyage.org, 1 wiktionary.org, 1 wiktoriaslife.com, 1 @@ -29089,6 +30592,7 @@ wiretime.de, 1 wiretrip.io, 1 wirhabenspass.de, 1 wirkstoffreich.de, 1 +wirralbouncycastles.co.uk, 1 wirsol.com, 1 wis.no, 1 wisak.eu, 1 @@ -29105,6 +30609,7 @@ witae.com, 1 withgoogle.com, 1 withinsecurity.com, 1 withlocals.com, 1 +withoutacrystalball.com, 1 withyoutube.com, 1 witneywaterpolo.org.uk, 1 wittepapaver.nl, 1 @@ -29113,9 +30618,12 @@ witway.nl, 0 wivoc.nl, 1 wiz.at, 1 wizard.gov, 1 +wizardbouncycastles.co.uk, 1 wizardspire.com, 1 wizzley.com, 0 +wizznab.tk, 1 wizzr.nl, 1 +wj0666.com, 1 wje-online.de, 1 wjg.ca, 1 wjg.dk, 1 @@ -29126,6 +30634,9 @@ wkv.com, 1 wkz.io, 1 wlaws.com, 1 wlci.gov, 1 +wlsme.org, 1 +wlt.ca, 1 +wltix.com, 1 wm-talk.net, 1 wmaccess.com, 1 wmawri.com, 1 @@ -29137,6 +30648,7 @@ wnu.com, 1 wo-ist-elvira.net, 1 wo2forum.nl, 0 wobble.ninja, 1 +wobblywotnotz.co.uk, 1 wochennummern.de, 1 wod-stavby.cz, 1 wodboss.com, 1 @@ -29177,6 +30689,7 @@ wombats.net, 1 women-only.net, 1 womenshairlossproject.com, 1 womf.org, 1 +wonabo.com, 1 wonder.com.mx, 1 wonderbill.com, 1 wonderbooks.club, 1 @@ -29198,11 +30711,14 @@ woomu.me, 1 woontegelwinkel.nl, 1 wooplagaming.com, 1 worcade.net, 1 +worcesterbouncycastlehire.co.uk, 1 +worcesterbouncycastles.co.uk, 1 worcesterdance.org, 1 worcesterfestival.co.uk, 1 wordbits.net, 1 wordcounter.net, 1 wordher.com, 1 +wordplay.one, 1 wordpress.com, 0 wordpresspro.cl, 1 wordsmart.it, 1 @@ -29228,8 +30744,10 @@ worldessays.com, 1 worldeventscalendars.com, 1 worldfree4.org, 1 worldofbelia.de, 1 +worldofparties.co.uk, 1 worldofterra.net, 1 worldofvnc.net, 1 +worldofwobble.co.uk, 1 worldpeacetechnology.com, 1 worldpovertysolutions.org, 1 worldsgreatestazuredemo.com, 1 @@ -29246,6 +30764,7 @@ woutergeraedts.nl, 1 woutervdb.com, 1 wow-foederation.de, 1 wowaffixes.info, 1 +wowbouncycastles.co.uk, 1 wowhelp.it, 1 wowjs.co.uk, 1 wowjs.org, 1 @@ -29253,6 +30772,7 @@ wowjs.uk, 1 wownmedia.com, 1 wozalapha.com, 1 wp-fastsearch.de, 1 +wp-master.org, 1 wp-mix.com, 1 wp-securehosting.com, 1 wp-stack.pro, 1 @@ -29336,6 +30856,7 @@ wug.jp, 1 wug.news, 1 wuji.cz, 1 wukongmusic.us, 0 +wulpi.it, 1 wumbo.cf, 1 wumbo.co.nz, 1 wumbo.ga, 1 @@ -29351,7 +30872,9 @@ wv-n.de, 1 wvg.myds.me, 1 wvw698.com, 1 wweforums.net, 1 +wweichen.com.cn, 1 wwgc2011.se, 1 +wwv-8522.com, 1 www-33445.com, 1 www-49889.com, 1 www-68277.com, 1 @@ -29485,8 +31008,10 @@ xdeftor.com, 1 xecureit.com, 1 xega.org, 1 xehost.com, 1 +xenomedia.nl, 1 xenophile.name, 1 xenosphere.tk, 1 +xenotropegames.com, 1 xenoworld.de, 1 xeonlab.com, 1 xeonlab.de, 1 @@ -29539,10 +31064,12 @@ xlaff.com, 1 xlan.be, 1 xlange.com, 1 xlfblog.com, 1 +xlinar.com, 1 xmedius.ca, 1 xmedius.com, 0 xmedius.eu, 1 xmenrevolution.com, 1 +xmerak.com, 1 xmiui.com, 1 xmlbeam.org, 1 xmpp.dk, 1 @@ -29554,6 +31081,7 @@ xn--3lqp21gwna.cn, 1 xn--6x6a.life, 1 xn--7ca.co, 1 xn--7xa.google.com, 1 +xn--80aaagmgvmvmcuoq7r.xn--p1ai, 1 xn--80azelb.xn--p1ai, 1 xn--88j2fy28hbxmnnf9zlw5buzd.com, 1 xn--8dry00a7se89ay98epsgxxq.com, 1 @@ -29583,6 +31111,7 @@ xn--e--4h4axau6ld4lna0g.com, 1 xn--e--ig4a4c3f6bvc5et632i.com, 1 xn--e--k83a5h244w54gttk.xyz, 1 xn--ecki0cd0bu9a4nsjb.com, 1 +xn--erklderbarenben-slbh.dk, 1 xn--f9jh4f4b4993b66s.tokyo, 1 xn--fischereiverein-mnsterhausen-i7c.de, 1 xn--grnderlehrstuhl-0vb.de, 1 @@ -29616,6 +31145,7 @@ xn--q9jb1h5dvcspke3218b9mn4p0c.com, 1 xn--qckss0j.tk, 1 xn--r8jzaf7977b09e.com, 1 xn--rdiger-kuhlmann-zvb.de, 1 +xn--rlcus7b3d.xn--xkc2dl3a5ee0h, 1 xn--roselire-60a.ch, 1 xn--roselire-60a.com, 1 xn--rt-cja.eu, 1 @@ -29626,6 +31156,7 @@ xn--sdkwa9azd389v01ya.com, 1 xn--seelenwchter-mcb.eu, 1 xn--spenijmazania-yhc.pl, 1 xn--srenpind-54a.dk, 1 +xn--t-oha.lv, 1 xn--t8j2a3042d.xyz, 1 xn--t8j4aa4nkg1h9bwcvud.com, 1 xn--t8j4aa4nyhxa7duezbl49aqg5546e264d.net, 1 @@ -29660,6 +31191,7 @@ xnet-x.net, 1 xng.io, 1 xninja.xyz, 1 xnode.org, 1 +xntrik.wtf, 1 xo.tc, 1 xoda.pw, 1 xolphin.nl, 1 @@ -29698,6 +31230,7 @@ xtom.chat, 1 xtom.com, 1 xtom.com.hk, 1 xtom.io, 1 +xtremebouncepartyhire.com.au, 1 xtremegaming.it, 1 xtremenutrition.com.br, 1 xtronics.com, 1 @@ -29730,6 +31263,7 @@ y11n.net, 1 y3451.com, 1 yaay.com.br, 1 yabrt.cn, 1 +yabuisha.jp, 1 yaccin.com, 1 yachigoya.com, 1 yacobo.com, 1 @@ -29772,12 +31306,14 @@ yaup.tk, 1 yawen.tw, 1 yawnbox.com, 1 yaxim.org, 1 +ybsul.com, 1 ybti.net, 1 ycaaz.com, 1 ych.art, 1 ychon.com, 1 yclan.net, 1 yd.io, 1 +yeapdata.com, 1 yecl.net, 1 yeesker.com, 1 yellowcar.website, 1 @@ -29816,6 +31352,7 @@ yelp.pt, 1 yelp.se, 1 yemalu.com, 1 yemekbaz.az, 1 +yennhi.co, 1 yep-pro.ch, 1 yepbitcoin.com, 1 yephy.com, 1 @@ -29869,6 +31406,7 @@ yogananda-roma.org, 1 yogaschoolrishikesh.com, 1 yogeshbeniwal.com, 0 yogoeasy.com, 1 +yoibyoin.info, 1 yoimise.net, 1 yoitoko.city, 1 yoitsu.moe, 1 @@ -29880,11 +31418,12 @@ yolops.net, 1 yombo.net, 1 yomena.in, 1 yoonas.com, 1 -yooooex.com, 1 yopers.com, 1 yoramvandevelde.net, 1 yorcom.nl, 0 yorcool.nl, 1 +yorkshiredalesinflatables.co.uk, 1 +yorkshireinflatables.co.uk, 1 yorkshireterrier.com.br, 1 yorname.ml, 1 yosbeda.com, 1 @@ -29905,6 +31444,7 @@ youcruit.com, 1 youdamom.com, 0 youdowell.com, 1 youdungoofd.com, 1 +youftp.tk, 1 yougee.ml, 1 youhacked.me, 1 youhavewords.com, 1 @@ -30036,6 +31576,7 @@ yvonnehaeusser.de, 1 ywyz.tech, 1 yyc.city, 1 yyyy.xyz, 1 +yzimroni.net, 1 z-konzept-nutrition.ru, 1 z-vector.com, 1 z.ai, 1 @@ -30050,6 +31591,9 @@ zabszk.net, 1 zacarias.com.ar, 1 zacavi.com.br, 1 zach.codes, 1 +zacharopoulos.eu, 1 +zacharopoulos.me, 1 +zacharopoulos.org, 1 zachborboa.com, 1 zachgibbens.org, 1 zachpeters.org, 1 @@ -30068,6 +31612,7 @@ zakcutner.uk, 1 zakladam.cz, 1 zakmccrac.de, 1 zakr.es, 1 +zakspartiesandevents.com, 1 zalamea.ph, 1 zalan.do, 1 zamis.net, 1 @@ -30105,6 +31650,7 @@ zdrojak.cz, 1 zdx.ch, 1 ze3kr.com, 1 zebbra.ro, 1 +zebedeescastles.co.uk, 1 zeds-official.com, 1 zeebrieshoekvanholland.nl, 1 zeel.com, 1 @@ -30222,6 +31768,7 @@ zivver.com, 1 zivy-ruzenec.cz, 0 zivyruzenec.cz, 0 zixiao.wang, 1 +zk9.nl, 1 zkrypt.cc, 1 zlatakus.cz, 1 zlatosnadno.cz, 1 @@ -30255,12 +31802,14 @@ zonemaster.net, 1 zonesec.org, 1 zonglovani.info, 1 zoo.city, 1 +zoofit.com.au, 1 zooish.net, 1 zoola.io, 1 zoological-gardens.eu, 1 zoom.earth, 1 zoomek.com, 1 zooom.azurewebsites.net, 1 +zooom2.azurewebsites.net, 1 zooparadies.eu, 1 zoorigin.com, 1 zootime.net, 1 From 299b66537552f25f13301802d7ec9aaf95030530 Mon Sep 17 00:00:00 2001 From: ffxbld Date: Thu, 2 Nov 2017 11:32:01 -0700 Subject: [PATCH 33/33] No bug, Automated HPKP preload list update from host bld-linux64-spot-031 - a=hpkp-update --- security/manager/ssl/StaticHPKPins.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index ff92a263a8cd..e945ed08c4fe 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1158,4 +1158,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = { static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1518053725194000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1518114522653000);