mirror of
https://github.com/certbot/certbot.git
synced 2026-08-01 10:51:53 +02:00
No newlines in JWK thumbprint (fixes #1165)
This commit is contained in:
@@ -35,7 +35,7 @@ class JWK(json_util.TypedJSONObjectWithFields):
|
|||||||
_thumbprint_json_dumps_params = {
|
_thumbprint_json_dumps_params = {
|
||||||
# "no whitespace or line breaks before or after any syntactic
|
# "no whitespace or line breaks before or after any syntactic
|
||||||
# elements"
|
# elements"
|
||||||
'indent': 0,
|
'indent': None,
|
||||||
'separators': (',', ':'),
|
'separators': (',', ':'),
|
||||||
# "members ordered lexicographically by the Unicode [UNICODE]
|
# "members ordered lexicographically by the Unicode [UNICODE]
|
||||||
# code points of the member names"
|
# code points of the member names"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
"""Tests for acme.jose.jwk."""
|
"""Tests for acme.jose.jwk."""
|
||||||
|
import binascii
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from acme import test_util
|
from acme import test_util
|
||||||
@@ -40,8 +41,9 @@ class JWKTestBaseMixin(object):
|
|||||||
class JWKOctTest(unittest.TestCase, JWKTestBaseMixin):
|
class JWKOctTest(unittest.TestCase, JWKTestBaseMixin):
|
||||||
"""Tests for acme.jose.jwk.JWKOct."""
|
"""Tests for acme.jose.jwk.JWKOct."""
|
||||||
|
|
||||||
thumbprint = (b"=,\xdd;I\x1a+i\x02x\x8a\x12?06IM\xc2\x80"
|
thumbprint = (b"\xf3\xe7\xbe\xa8`\xd2\xdap\xe9}\x9c\xce>"
|
||||||
b"\xe4\xc3\x1a\xfc\x89\xf3)'\xce\xccm\xfd5")
|
b"\xd0\xfcI\xbe\xcd\x92'\xd4o\x0e\xf41\xea"
|
||||||
|
b"\x8e(\x8a\xb2i\x1c")
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
from acme.jose.jwk import JWKOct
|
from acme.jose.jwk import JWKOct
|
||||||
@@ -71,8 +73,8 @@ class JWKRSATest(unittest.TestCase, JWKTestBaseMixin):
|
|||||||
"""Tests for acme.jose.jwk.JWKRSA."""
|
"""Tests for acme.jose.jwk.JWKRSA."""
|
||||||
# pylint: disable=too-many-instance-attributes
|
# pylint: disable=too-many-instance-attributes
|
||||||
|
|
||||||
thumbprint = (b'\x08\xfa1\x87\x1d\x9b6H/*\x1eW\xc2\xe3\xf6P'
|
thumbprint = (b'\x83K\xdc#3\x98\xca\x98\xed\xcb\x80\x80<\x0c'
|
||||||
b'\xefs\x0cKB\x87\xcf\x85yO\x045\x0e\x91\x80\x0b')
|
b'\xf0\x95\xb9H\xb2*l\xbd$\xe5&|O\x91\xd4 \xb0Y')
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
from acme.jose.jwk import JWKRSA
|
from acme.jose.jwk import JWKRSA
|
||||||
@@ -168,6 +170,22 @@ class JWKRSATest(unittest.TestCase, JWKTestBaseMixin):
|
|||||||
self.assertRaises(errors.DeserializationError, JWK.from_json,
|
self.assertRaises(errors.DeserializationError, JWK.from_json,
|
||||||
{'kty': 'RSA', 'e': 'AQAB', 'n': '1'})
|
{'kty': 'RSA', 'e': 'AQAB', 'n': '1'})
|
||||||
|
|
||||||
|
def test_thumbprint_go_jose(self):
|
||||||
|
# https://github.com/square/go-jose/blob/4ddd71883fa547d37fbf598071f04512d8bafee3/jwk.go#L155
|
||||||
|
# https://github.com/square/go-jose/blob/4ddd71883fa547d37fbf598071f04512d8bafee3/jwk_test.go#L331-L344
|
||||||
|
# https://github.com/square/go-jose/blob/4ddd71883fa547d37fbf598071f04512d8bafee3/jwk_test.go#L384
|
||||||
|
from acme.jose.jwk import JWKRSA
|
||||||
|
key = JWKRSA.json_loads("""{
|
||||||
|
"kty": "RSA",
|
||||||
|
"kid": "bilbo.baggins@hobbiton.example",
|
||||||
|
"use": "sig",
|
||||||
|
"n": "n4EPtAOCc9AlkeQHPzHStgAbgs7bTZLwUBZdR8_KuKPEHLd4rHVTeT-O-XV2jRojdNhxJWTDvNd7nqQ0VEiZQHz_AJmSCpMaJMRBSFKrKb2wqVwGU_NsYOYL-QtiWN2lbzcEe6XC0dApr5ydQLrHqkHHig3RBordaZ6Aj-oBHqFEHYpPe7Tpe-OfVfHd1E6cS6M1FZcD1NNLYD5lFHpPI9bTwJlsde3uhGqC0ZCuEHg8lhzwOHrtIQbS0FVbb9k3-tVTU4fg_3L_vniUFAKwuCLqKnS2BYwdq_mzSnbLY7h_qixoR7jig3__kRhuaxwUkRz5iaiQkqgc5gHdrNP5zw",
|
||||||
|
"e": "AQAB"
|
||||||
|
}""")
|
||||||
|
self.assertEqual(
|
||||||
|
binascii.hexlify(key.thumbprint()),
|
||||||
|
b"f63838e96077ad1fc01c3f8405774dedc0641f558ebb4b40dccf5f9b6d66a932")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main() # pragma: no cover
|
unittest.main() # pragma: no cover
|
||||||
|
|||||||
Reference in New Issue
Block a user