mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-27 06:41:27 +00:00
7e7ba08548
- Bug 1119049 - Keyboard shortcuts should work in MediaDocuments without explicitly focusing the media element. r=bz (46be3d5343)
- fix (3ade1708af)
- Bug 967982 - Show findbar after unsuccessful Find Again [r=mikedeboer] (8f228f14a1)
- Bug 1071631 - fix findbar re-filling in last character, r=mikedeboer (1dcea48088)
- Bug 1214249 - Set MOZ_FLOAT_ABI in armv6 case r=glandium (8c53df59f6)
- Bug 1223093 - Bump required rustc version to 1.4. r=mshal (2e116f0dc6)
- Bug 1208566 - require Rust 1.5 for --enable-rust builds; r=mshal (091c824772)
- bump gcc version to 4.4 and use e.g. MacPorts gcc for safety (1af814d7bd)
- reorder and fix (c74b24dfbf)
- Bug 1043112 - Allow b2g to core dump when signal permits. r=jld (f5afeb0051)
- Bug 1190965 - Restrict syscalls in nsProfileLock to Linux. r=jld (9ac892b4eb)
- Bug 1227569 - Remove unsupported OpenVMS code. r=mccr8 (ea080668c9)
- Bug 1227248 - Part 1: Allow extending StrictOrderingOnAppendListWithFlags. r=gps (52260fd46d)
- Bug 1163358 - Add "psm" tag to PSM xpcshell and mochitest manifests. r=dkeeler (aa31fa4e2f)
- Bug 1167254 - Convert test_bug234856.html mochitest to an xpcshell test. r=keeler (1f20c9f997)
- Bug 1169195 - Convert test_bug644006.html mochitest to an xpcshell test. r=keeler (f391df2ed5)
- bug 1181376 - convert test_bug480619.html to an xpcshell test r=mgoodwin (3bb1a3b762)
- Bug 1167866 - Add result strings to PSM test_cert* xpcshell tests. r=keeler (74743ab236)
- Bug 1171819 - Convert test_cert_eku-*.js to generate certificates at build time. r=keeler (9aea62b0dc)
- bug 1203312 - split tlsserver certificates into ocsp_certs and bad_certs r=mgoodwin (599437ece7)
- bug 1209695 - fold mochitest test_bug413909.html into xpcshell test_cert_overrides.js r=mgoodwin (cd5769201b)
- bug 1187029 - convert test_bug480509.html to an xpcshell test r=jcj (966cb02692)
- bug 1174292 - convert test_cert_version.js to generate certificates at build time r=Cykesiopka (7acb99f5ee)
- bug 1173565 - convert test_pinning_dynamic.js to generate certificates at build time r=Cykesiopka (cf5844376a)
- bug 1178988 - convert test_ocsp_url to generate certificates at build time r=Cykesiopka (de5554cb7b)
- bug 1189427 - convert test_ocsp_fetch_method.js to generate certificates at build time r=mgoodwin (9955a340fa)
- bug 1194013 - convert test_name_constraints.js to generate certificates at build time r=Cykesiopka,mgoodwin (0060e4232f)
- bug 1196853 - convert test_cert_signatures.js to generate certificat s at build time r=jcj (ce0ab9e63a)
- bug 1190603 - convert test_keysize.js to generate certificates at build time r=Cykesiopka (3dd9972c8f)
- Bug 1228794 - Convert test_getchain.js to generate certificates at build time. r=keeler (cf6b4d3c47)
- Bug 901698 - Some tests for OCSP-must-staple; r=keeler (4f51b34bee)
- Bug 1179678 - Add result strings to misc PSM xpcshell tests. r=keeler (a2142e0ca1)
- Bug 1205962 - Address some pylint complaints about pycert.py and pykey.py, r=keeler (190cdb0e4a)
- Bug 1218999 - Back out changeset 5f32b2bcfa43 (bug 1188468) in favor of a more efficient solution. r=glandium (195e060c30)
- Bug 1222903 - Reject EV status for EV EE certs that are valid for longer than 27 months as well. r=keeler (811b0bcc46)
- Bug 1231315 - Build CONFIGURE_DEFINE_FILES at build time instead of during configure. r=gps (5242734649)
- gradle remove (b745c7b2e4)
- Bug 1232421 - force matching the start of the line for comments, r=glandium (de93f61f91)
- Bug 1232421 - followup: fix test to not use 'inline comments' which are not supported elsewhere, rs=bustage on a CLOSED TREE (9e34a9d721)
- Bug 1172645 - Make mozbuild's setup.py work; r=glandium (b73b656574)
- bug 1166976 - add pyasn1-modules python library r=ted,gerv (24c7f3253f)
- bug 1166976 - add Python-RSA python library r=ted,gerv (9628d1583f)
- bug 1166976 - generate some PSM xpcshell test certificates at build time r=Cykesiopka,mgoodwin,froydnj (af4744b19d)
- Bug 1224478 - Replace do_check_* calls with their Assert.jsm equivalents in PSM xpcshell tests. r=keeler (6846617e65)
- bug 975763 - move test_certificate_overrides.html to test_cert_override_bits_mismatches.js r=mgoodwin (4ba930e064)
- Bug 1171820 - Convert test_bug483440.html mochitest to an xpcshell test. r=keeler (d41a63cd13)
- Bug 1147726: Disable test_keysize_ev.js on slow B2G Emulator debug builds. r=dkeeler (df54c1bbc8)
- Bug 1147725 - Disable test_ocsp_fetch_method.js and test_ocsp_url.js on slow B2G Emulator debug builds. r=keeler (56e71d8d7f)
- bug 1081128 - test_pinning.js takes ~300 seconds on b2g debug emulator - request a longer timeout for it r=Cykesiopka (20ecf7ca8b)
- Bug 1145679 - Part 2 - Tests. r=keeler (046b88cd37)
- Bug 1227248 - Part 2: Add GeneratedTest{Certificate,Key} mozbuild templates. r=gps (810848b3bc)
- Bug 1227248 - Part 3: Make GeneratedTest{Certificate,Key} no-op when --disable-compile-environment. r=gps (563c26d64b)
- Bug 1130413 - Remove unused nsITokenPasswordDialogs::GetPassword() function. r=jjones (0cff903788)
- Bug 1157515 - CipherSuiteChangeObserver should clean itself up. r=keeler (e9175e8f89)
- Bug 1215779 - Remove broken (non-EC) DSA keygen code. r=keeler (98a09304c1)
- bug 1215270 - remove some unused functions from nsNSSShutDown.h r=Cykesiopka (ea0e9566f2)
- bug 1215690 - remove nsPSMUITracker r=Cykesiopka r=mgoodwin (98ea9b8481)
- bug 1205767 - prevent memory leak when generating an EC key with <keygen> r=ttaubert (3be4b5f545)
- Bug 488480 - Correct documentation about the function hasMatchingOverride() in nsICertOverrideService.idl. Original patch by Johnathan Nightingale. r=keeler (bf2b16f2c0)
- Bug 629558 - Pref to make Intermediate Cert Store memory-only. r=keeler (19632e2fd6)
- typo (86093804e3)
- Bug 278689 - Multiple Certificates with the same subject are not shown in the digital signature select cert combo (only one is shown) r=dkeeler (c5984b6857)
144 lines
4.7 KiB
Python
144 lines
4.7 KiB
Python
#!/usr/bin/python
|
|
#
|
|
from pyasn1.codec.der import decoder, encoder
|
|
from pyasn1_modules import rfc2560, rfc2459, pem
|
|
from pyasn1.type import univ
|
|
import sys, hashlib
|
|
try:
|
|
import urllib2
|
|
except ImportError:
|
|
import urllib.request as urllib2
|
|
|
|
sha1oid = univ.ObjectIdentifier((1, 3, 14, 3, 2, 26))
|
|
|
|
class ValueOnlyBitStringEncoder(encoder.encoder.BitStringEncoder):
|
|
# These methods just do not encode tag and length fields of TLV
|
|
def encodeTag(self, *args): return ''
|
|
def encodeLength(self, *args): return ''
|
|
def encodeValue(*args):
|
|
substrate, isConstructed = encoder.encoder.BitStringEncoder.encodeValue(*args)
|
|
# OCSP-specific hack follows: cut off the "unused bit count"
|
|
# encoded bit-string value.
|
|
return substrate[1:], isConstructed
|
|
|
|
def __call__(self, bitStringValue):
|
|
return self.encode(None, bitStringValue, defMode=1, maxChunkSize=0)
|
|
|
|
valueOnlyBitStringEncoder = ValueOnlyBitStringEncoder()
|
|
|
|
def mkOcspRequest(issuerCert, userCert):
|
|
issuerTbsCertificate = issuerCert.getComponentByName('tbsCertificate')
|
|
issuerSubject = issuerTbsCertificate.getComponentByName('subject')
|
|
|
|
userTbsCertificate = userCert.getComponentByName('tbsCertificate')
|
|
userIssuer = userTbsCertificate.getComponentByName('issuer')
|
|
|
|
assert issuerSubject == userIssuer, '%s\n%s' % (
|
|
issuerSubject.prettyPrint(), userIssuer.prettyPrint()
|
|
)
|
|
|
|
userIssuerHash = hashlib.sha1(
|
|
encoder.encode(userIssuer)
|
|
).digest()
|
|
|
|
issuerSubjectPublicKey = issuerTbsCertificate.getComponentByName('subjectPublicKeyInfo').getComponentByName('subjectPublicKey')
|
|
|
|
issuerKeyHash = hashlib.sha1(
|
|
valueOnlyBitStringEncoder(issuerSubjectPublicKey)
|
|
).digest()
|
|
|
|
userSerialNumber = userTbsCertificate.getComponentByName('serialNumber')
|
|
|
|
# Build request object
|
|
|
|
request = rfc2560.Request()
|
|
|
|
reqCert = request.setComponentByName('reqCert').getComponentByName('reqCert')
|
|
|
|
hashAlgorithm = reqCert.setComponentByName('hashAlgorithm').getComponentByName('hashAlgorithm')
|
|
hashAlgorithm.setComponentByName('algorithm', sha1oid)
|
|
|
|
reqCert.setComponentByName('issuerNameHash', userIssuerHash)
|
|
reqCert.setComponentByName('issuerKeyHash', issuerKeyHash)
|
|
reqCert.setComponentByName('serialNumber', userSerialNumber)
|
|
|
|
ocspRequest = rfc2560.OCSPRequest()
|
|
|
|
tbsRequest = ocspRequest.setComponentByName('tbsRequest').getComponentByName('tbsRequest')
|
|
tbsRequest.setComponentByName('version', 'v1')
|
|
|
|
requestList = tbsRequest.setComponentByName('requestList').getComponentByName('requestList')
|
|
requestList.setComponentByPosition(0, request)
|
|
|
|
return ocspRequest
|
|
|
|
def parseOcspRequest(ocspRequest):
|
|
tbsRequest = ocspRequest['responseStatus']
|
|
|
|
assert responseStatus == rfc2560.OCSPResponseStatus('successful'), responseStatus.prettyPrint()
|
|
responseBytes = ocspResponse.getComponentByName('responseBytes')
|
|
responseType = responseBytes.getComponentByName('responseType')
|
|
assert responseType == id_pkix_ocsp_basic, responseType.prettyPrint()
|
|
|
|
response = responseBytes.getComponentByName('response')
|
|
|
|
basicOCSPResponse, _ = decoder.decode(
|
|
response, asn1Spec=rfc2560.BasicOCSPResponse()
|
|
)
|
|
|
|
tbsResponseData = basicOCSPResponse.getComponentByName('tbsResponseData')
|
|
|
|
response0 = tbsResponseData.getComponentByName('responses').getComponentByPosition(0)
|
|
|
|
return (
|
|
tbsResponseData.getComponentByName('producedAt'),
|
|
response0.getComponentByName('certID'),
|
|
response0.getComponentByName('certStatus').getName(),
|
|
response0.getComponentByName('thisUpdate')
|
|
)
|
|
|
|
if len(sys.argv) != 2:
|
|
print("""Usage:
|
|
$ cat CACertificate.pem userCertificate.pem | %s <ocsp-responder-url>""" % sys.argv[0])
|
|
sys.exit(-1)
|
|
else:
|
|
ocspUrl = sys.argv[1]
|
|
|
|
# Parse CA and user certificates
|
|
|
|
issuerCert, _ = decoder.decode(
|
|
pem.readPemFromFile(sys.stdin)[1],
|
|
asn1Spec=rfc2459.Certificate()
|
|
)
|
|
userCert, _ = decoder.decode(
|
|
pem.readPemFromFile(sys.stdin)[1],
|
|
asn1Spec=rfc2459.Certificate()
|
|
)
|
|
|
|
# Build OCSP request
|
|
|
|
ocspReq = mkOcspRequest(issuerCert, userCert)
|
|
|
|
# Use HTTP POST to get response (see Appendix A of RFC 2560)
|
|
# In case you need proxies, set the http_proxy env variable
|
|
|
|
httpReq = urllib2.Request(
|
|
ocspUrl,
|
|
encoder.encode(ocspReq),
|
|
{ 'Content-Type': 'application/ocsp-request' }
|
|
)
|
|
httpRsp = urllib2.urlopen(httpReq).read()
|
|
|
|
# Process OCSP response
|
|
|
|
ocspRsp, _ = decoder.decode(httpRsp, asn1Spec=rfc2560.OCSPResponse())
|
|
|
|
producedAt, certId, certStatus, thisUpdate = parseOcspResponse(ocspRsp)
|
|
|
|
print('Certificate ID %s is %s at %s till %s\n' % (
|
|
certId.getComponentByName('serialNumber'),
|
|
certStatus,
|
|
producedAt,
|
|
thisUpdate
|
|
))
|