Skip to content
This repository was archived by the owner on Apr 13, 2024. It is now read-only.

Commit 1e01f5c

Browse files
committed
Update tests to hs2019 and add one deprecated test using old keys
1 parent 4052954 commit 1e01f5c

File tree

7 files changed

+117
-29
lines changed

7 files changed

+117
-29
lines changed

httpsig/tests/rsa_private_2048.pem

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIIEogIBAAKCAQB7eXXK+gSpDXsvZkcXd19X85iemJd0KywRH+/W+1J1j8pd+O1l
3+
H2He8GLaDFCwFijTvTmptfMYB2XyvG8/tPpaSzaIbSBlKXWxSo1fdUMf2e7SbqVr
4+
Fi5DolPrIfRpVqw4iqnTZZ46Y2vfa57Ee3NRF5zoagMS9BM7nfuCKvzZcUK81V75
5+
hup5kpMHW1ofBZAPwQMm8CoXD1bpM+acN1N+63vgTY2QyUq2yJOI3HJvyFZTw+Sj
6+
/ialYtDvDTluBH98i4504OIA6z0SCijF11irvAOSPc0GVXB8HjtUlqbD0BD6Hyqg
7+
MeXgi9nGJhJDnJDiCVlPwg6Ni+h3nW/sXXopAgMBAAECggEANkOg8v2CAtG7647l
8+
e3io3DxgPIMPPKykhzoj67Uz/hqdc0MtAZ4TIyk+KFn1NA3pD3U/3EfseAj4Uv9h
9+
XPwqcnhPlRFwhUT9RldfXi5ou5zJio26ASAUYQD8JIAdrBW9RnQaQp+MNFjxVZU0
10+
h2FBwse/25yLkU7XDQJXQFOoH988Dpozz1y8q11NxurakR67+xtqO5KG7FZdwCsN
11+
W2Z7gTm7T59NYdHevFi2b91hdBdLWCn9RPduEvRViQY5KzzkT6cg493G3vCPXxCy
12+
9C9aCNF7PXghy/im7dLz+H28xYls3KPOJve2dmvox2+aPH66TgXkfj/kfULJmHZq
13+
el3dIQKBgQDAxiqPcEF1Fq4UOoipCvcpiyz0gdFFw1x58km9GOpDdDK1bqcFc2z/
14+
GEoauWVl/PZZJdmht1zzkg4R3Izpbsg1IFxd3m7KbcfOK2bA9h2QPmjW8OwSu4/h
15+
/l8mDsNF5crOdBnUHacgHhL1SJx323Yu3z9PmiN9wLW1gyYkh82SzQKBgQCj+LWP
16+
1DZdsHOs224CjGjfj02PsaV5RNgD7Qqk5VcQFHzmJTAqoroPzJNjUD1sUnXXJHI0
17+
JL533giIsxQxnyca1qtxaO6KA4baykQtKKQqKTWhE2oowS1howHRbLShq1Hxvw9S
18+
QSS0ZAo5DyjZLMkVnlB+v7sXJR8X0Ru8qHKczQKBgQCBMEy1c/VqEpj21YNgRgj9
19+
vleSRK2KozIGR2lDYL8eFXEmRdGIxaH2EsEWx8g8YRp3A/aleczBLtBfB/8nMSba
20+
86TzA24cGxYcBNoH1uhZEnoQEcUjiK8UNPRu/NXAsg8H7KaikHy/+WebGd5CNMEv
21+
CE3VeubuD4e27P1S3e/WwQKBgDzgGjASvjhcSSXUtWv2yvyszEPb1S5Hk9cpSvlb
22+
N859fL1I8y/xCBjTf6iwYo1zs9Iy8r9PIPOJmCuAKLAfgToilrXdGipdEtTpoRQO
23+
8ZvBfuqVNaV5yqpkBUnGDO20mBCjOUH1c3YRagYzDZxLV0BSbVoRPpliK8AA30ZU
24+
V3DFAoGAfaPc8p6o7tCaPMpRxynIAvgIqg4sIBJdX/G4Q+SZeZR/mFlfpuhY4kzh
25+
CL+RKAhOyOaYsSxlk4vB954y4UZFl6/t2W6gNxouelA77TgV2/rjx/fLk06J+RIF
26+
QQkiAXwUZ2xpmdnUk+UREBwrB3LoU9kZM6fKX/LB4QEZuOmbERQ=
27+
-----END RSA PRIVATE KEY-----
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3
33
6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6
44
Z4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw
55
oYi+1hqp1fIekaxsyQIDAQAB
6-
-----END PUBLIC KEY-----
6+
-----END PUBLIC KEY-----

httpsig/tests/rsa_public_2048.pem

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB7eXXK+gSpDXsvZkcXd19X
3+
85iemJd0KywRH+/W+1J1j8pd+O1lH2He8GLaDFCwFijTvTmptfMYB2XyvG8/tPpa
4+
SzaIbSBlKXWxSo1fdUMf2e7SbqVrFi5DolPrIfRpVqw4iqnTZZ46Y2vfa57Ee3NR
5+
F5zoagMS9BM7nfuCKvzZcUK81V75hup5kpMHW1ofBZAPwQMm8CoXD1bpM+acN1N+
6+
63vgTY2QyUq2yJOI3HJvyFZTw+Sj/ialYtDvDTluBH98i4504OIA6z0SCijF11ir
7+
vAOSPc0GVXB8HjtUlqbD0BD6HyqgMeXgi9nGJhJDnJDiCVlPwg6Ni+h3nW/sXXop
8+
AgMBAAE=
9+
-----END PUBLIC KEY-----

httpsig/tests/test_signature.py

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
1212

13-
sign.DEFAULT_SIGN_ALGORITHM = "rsa-sha256"
13+
sign.DEFAULT_SIGN_ALGORITHM = "hs2019"
1414

1515

1616
class TestSign(unittest.TestCase):
@@ -19,17 +19,22 @@ class TestSign(unittest.TestCase):
1919
header_host = 'example.com'
2020
header_date = 'Thu, 05 Jan 2014 21:31:40 GMT'
2121
header_content_type = 'application/json'
22-
header_digest = 'SHA-256=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE='
22+
header_digest = 'SHA-512=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE='
2323
header_content_length = '18'
2424

2525
def setUp(self):
26-
self.key_path = os.path.join(
27-
os.path.dirname(__file__), 'rsa_private.pem')
28-
with open(self.key_path, 'rb') as f:
29-
self.key = f.read()
26+
self.key_path_2048 = os.path.join(
27+
os.path.dirname(__file__), 'rsa_private_2048.pem')
28+
with open(self.key_path_2048, 'rb') as f:
29+
self.key_2048 = f.read()
30+
31+
self.key_path_1024 = os.path.join(
32+
os.path.dirname(__file__), 'rsa_private_1024.pem')
33+
with open(self.key_path_1024, 'rb') as f:
34+
self.key_1024 = f.read()
3035

3136
def test_default(self):
32-
hs = sign.HeaderSigner(key_id='Test', secret=self.key)
37+
hs = sign.HeaderSigner(key_id='Test', secret=self.key_2048, sign_algorithm="PSS", salt_length=0)
3338
unsigned = {
3439
'Date': self.header_date
3540
}
@@ -43,11 +48,11 @@ def test_default(self):
4348
self.assertIn('algorithm', params)
4449
self.assertIn('signature', params)
4550
self.assertEqual(params['keyId'], 'Test')
46-
self.assertEqual(params['algorithm'], 'rsa-sha256')
47-
self.assertEqual(params['signature'], 'jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9HpFQlG7N4YcJPteKTu4MWCLyk+gIr0wDgqtLWf9NLpMAMimdfsH7FSWGfbMFSrsVTHNTk0rK3usrfFnti1dxsM4jl0kYJCKTGI/UWkqiaxwNiKqGcdlEDrTcUhhsFsOIo8VhddmZTZ8w=') # noqa: E501
51+
self.assertEqual(params['algorithm'], 'hs2019')
52+
self.assertEqual(params['signature'], 'T8+Cj3Zp2cBDm2r8/loPgfHUSSFXXyZJNxxbNx1NvKVz/r5T4z6pVxhl9rqk8WfYHMdlh2aT5hCrYKvhs88Jy0DDmeUP4nELWRsO1BF0oAqHfcrbEikZQL7jA6z0guVaLr0S5QRGmd1K5HUEkP/vYEOns+FRL+JrFG4dNJNESvG5iyKUoaXfoZCFdqtzLlIteEAL7dW/kaX/dE116wfpbem1eCABuGopRhuFtjqLKVjuUVwyP/zSYTqd9j+gDhinkAifTJPxbGMh0b5LZdNCqw5irT9NkTcTFRXDp8ioX8r805Z9QhjT7H+rSo350U2LsAFoQ9ttryPBOoMPCiQTlw==') # noqa: E501
4853

4954
def test_basic(self):
50-
hs = sign.HeaderSigner(key_id='Test', secret=self.key, headers=[
55+
hs = sign.HeaderSigner(key_id='Test', secret=self.key_2048, sign_algorithm="PSS", salt_length=0, headers=[
5156
'(request-target)',
5257
'host',
5358
'date',
@@ -68,13 +73,13 @@ def test_basic(self):
6873
self.assertIn('algorithm', params)
6974
self.assertIn('signature', params)
7075
self.assertEqual(params['keyId'], 'Test')
71-
self.assertEqual(params['algorithm'], 'rsa-sha256')
76+
self.assertEqual(params['algorithm'], 'hs2019')
7277
self.assertEqual(
7378
params['headers'], '(request-target) host date')
74-
self.assertEqual(params['signature'], 'HUxc9BS3P/kPhSmJo+0pQ4IsCo007vkv6bUm4Qehrx+B1Eo4Mq5/6KylET72ZpMUS80XvjlOPjKzxfeTQj4DiKbAzwJAb4HX3qX6obQTa00/qPDXlMepD2JtTw33yNnm/0xV7fQuvILN/ys+378Ysi082+4xBQFwvhNvSoVsGv4=') # noqa: E501
79+
self.assertEqual(params['signature'], 'KkF4oeOJJH9TaYjQdaU634G7AVmM5Bf3fnfJCBZ7G0H5puW5XlQTpduA+TgouKOJhbv4aRRpunPzCHUxUjEvrR3TSALqW1EOsBwCVIusE9CnrhL7vUOvciIDai/jI15RsfR9+XyTmOSFbsI07E8mmywr3nLeWX6AAFDMO2vWc21zZxrSc13vFfAkVvFhXLxO4g0bBm6Z4m5/9ytWtdE0Gf3St2kY8aZTedllRCS8cMx8GVAIw/qYGeIlGKUCZKxrFxnviN7gfxixwova6lcxpppIo+WXxEiwMJfSQBlx0WGn3A3twCv6TsIxPOVUEW4jcogDh+jGFf1aGdVyHquTRQ==') # noqa: E501
7580

7681
def test_all(self):
77-
hs = sign.HeaderSigner(key_id='Test', secret=self.key, headers=[
82+
hs = sign.HeaderSigner(key_id='Test', secret=self.key_2048, sign_algorithm="PSS", salt_length=0, headers=[
7883
'(request-target)',
7984
'host',
8085
'date',
@@ -101,8 +106,26 @@ def test_all(self):
101106
self.assertIn('algorithm', params)
102107
self.assertIn('signature', params)
103108
self.assertEqual(params['keyId'], 'Test')
104-
self.assertEqual(params['algorithm'], 'rsa-sha256')
109+
self.assertEqual(params['algorithm'], 'hs2019')
105110
self.assertEqual(
106111
params['headers'],
107112
'(request-target) host date content-type digest content-length')
108-
self.assertEqual(params['signature'], 'Ef7MlxLXoBovhil3AlyjtBwAL9g4TN3tibLj7uuNB3CROat/9KaeQ4hW2NiJ+pZ6HQEOx9vYZAyi+7cmIkmJszJCut5kQLAwuX+Ms/mUFvpKlSo9StS2bMXDBNjOh4Auj774GFj4gwjS+3NhFeoqyr/MuN6HsEnkvn6zdgfE2i0=') # noqa: E501
113+
self.assertEqual(params['signature'], 'Ur8ehf0YlxBIRyXJG+iBBubrMlxWxDqpYgEaABq5ukcant30Gygkrs4ujFWxlR8pbBS/kDewYdlNhJOsVva2Y/ZSmardYHWYuSw3QjW0KON7nfVT/hijDFCAAzDDOqS6uSJimWmyko23bt2XDydMS2ekGoRFXxQcCtd2piWDpwaHneZiUu4njoiyRVZo9dLWMe9i9QR/14tjWO+PinfSlo1Bs1uMKGjx3EDRSw76cMHXb0VURzVf08ShBxsnts8o/l8TPNyMgcqeEuNaMFTr3rMMpfkeLtBcBljqnvPjusAPmzJxi6aElophSmuPpwSgC/QCHOxT99mEObrf0VDRNw==') # noqa: E501
114+
115+
def test_default_deprecated_256(self):
116+
hs = sign.HeaderSigner(key_id='Test', secret=self.key_1024, algorithm="rsa-sha256")
117+
unsigned = {
118+
'Date': self.header_date
119+
}
120+
signed = hs.sign(unsigned)
121+
self.assertIn('Date', signed)
122+
self.assertEqual(unsigned['Date'], signed['Date'])
123+
self.assertIn('Authorization', signed)
124+
auth = parse_authorization_header(signed['authorization'])
125+
params = auth[1]
126+
self.assertIn('keyId', params)
127+
self.assertIn('algorithm', params)
128+
self.assertIn('signature', params)
129+
self.assertEqual(params['keyId'], 'Test')
130+
self.assertEqual(params['algorithm'], 'rsa-sha256')
131+
self.assertEqual(params['signature'], 'jKyvPcxB4JbmYY4mByyBY7cZfNl4OW9HpFQlG7N4YcJPteKTu4MWCLyk+gIr0wDgqtLWf9NLpMAMimdfsH7FSWGfbMFSrsVTHNTk0rK3usrfFnti1dxsM4jl0kYJCKTGI/UWkqiaxwNiKqGcdlEDrTcUhhsFsOIo8VhddmZTZ8w=') # noqa: E501

httpsig/tests/test_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class TestUtils(unittest.TestCase):
1111

1212
def test_get_fingerprint(self):
1313
with open(os.path.join(
14-
os.path.dirname(__file__), 'rsa_public.pem'), 'r') as k:
14+
os.path.dirname(__file__), 'rsa_public_1024.pem'), 'r') as k:
1515
key = k.read()
1616
fingerprint = get_fingerprint(key)
1717
self.assertEqual(

httpsig/tests/test_verify.py

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,12 @@ def setUp(self):
4343
self.algorithm = "hmac-sha1"
4444
self.sign_secret = secret
4545
self.verify_secret = secret
46+
self.sign_algorithm = None
4647

4748
def test_basic_sign(self):
48-
signer = Signer(secret=self.sign_secret, algorithm=self.algorithm)
49+
signer = Signer(secret=self.sign_secret, algorithm=self.algorithm, sign_algorithm=self.sign_algorithm)
4950
verifier = Verifier(
50-
secret=self.verify_secret, algorithm=self.algorithm)
51+
secret=self.verify_secret, algorithm=self.algorithm, sign_algorithm=self.sign_algorithm)
5152

5253
GOOD = b"this is a test"
5354
BAD = b"this is not the signature you were looking for..."
@@ -64,10 +65,10 @@ def test_default(self):
6465

6566
hs = HeaderSigner(
6667
key_id="Test", secret=self.sign_secret, algorithm=self.algorithm,
67-
sign_header=self.sign_header)
68+
sign_header=self.sign_header, sign_algorithm=self.sign_algorithm)
6869
signed = hs.sign(unsigned)
6970
hv = HeaderVerifier(
70-
headers=signed, secret=self.verify_secret, sign_header=self.sign_header)
71+
headers=signed, secret=self.verify_secret, sign_header=self.sign_header, sign_algorithm=self.sign_algorithm)
7172
self.assertTrue(hv.verify())
7273

7374
def test_signed_headers(self):
@@ -86,7 +87,8 @@ def test_signed_headers(self):
8687
'content-type',
8788
'digest',
8889
'content-length'
89-
])
90+
],
91+
sign_algorithm=self.sign_algorithm)
9092
unsigned = {
9193
'Host': HOST,
9294
'Date': self.header_date,
@@ -99,7 +101,7 @@ def test_signed_headers(self):
99101
hv = HeaderVerifier(
100102
headers=signed, secret=self.verify_secret,
101103
host=HOST, method=METHOD, path=PATH,
102-
sign_header=self.sign_header)
104+
sign_header=self.sign_header, sign_algorithm=self.sign_algorithm)
103105
self.assertTrue(hv.verify())
104106

105107
def test_incorrect_headers(self):
@@ -116,7 +118,8 @@ def test_incorrect_headers(self):
116118
'date',
117119
'content-type',
118120
'digest',
119-
'content-length'])
121+
'content-length'],
122+
sign_algorithm=self.sign_algorithm)
120123
unsigned = {
121124
'Host': HOST,
122125
'Date': self.header_date,
@@ -129,7 +132,7 @@ def test_incorrect_headers(self):
129132
hv = HeaderVerifier(headers=signed, secret=self.verify_secret,
130133
required_headers=["some-other-header"],
131134
host=HOST, method=METHOD, path=PATH,
132-
sign_header=self.sign_header)
135+
sign_header=self.sign_header, sign_algorithm=self.sign_algorithm)
133136
with self.assertRaises(Exception):
134137
hv.verify()
135138

@@ -148,7 +151,8 @@ def test_extra_auth_headers(self):
148151
'content-type',
149152
'digest',
150153
'content-length'
151-
])
154+
],
155+
sign_algorithm=self.sign_algorithm)
152156
unsigned = {
153157
'Host': HOST,
154158
'Date': self.header_date,
@@ -163,7 +167,8 @@ def test_extra_auth_headers(self):
163167
method=METHOD,
164168
path=PATH,
165169
sign_header=self.sign_header,
166-
required_headers=['date', '(request-target)'])
170+
required_headers=['date', '(request-target)'],
171+
sign_algorithm=self.sign_algorithm)
167172
self.assertTrue(hv.verify())
168173

169174

@@ -186,20 +191,21 @@ class TestVerifyRSASHA1(TestVerifyHMACSHA1):
186191
def setUp(self):
187192
private_key_path = os.path.join(
188193
os.path.dirname(__file__),
189-
'rsa_private.pem')
194+
'rsa_private_1024.pem')
190195
with open(private_key_path, 'rb') as f:
191196
private_key = f.read()
192197

193198
public_key_path = os.path.join(
194199
os.path.dirname(__file__),
195-
'rsa_public.pem')
200+
'rsa_public_1024.pem')
196201
with open(public_key_path, 'rb') as f:
197202
public_key = f.read()
198203

199204
self.keyId = "Test"
200205
self.algorithm = "rsa-sha1"
201206
self.sign_secret = private_key
202207
self.verify_secret = public_key
208+
self.sign_algorithm = None
203209

204210

205211
class TestVerifyRSASHA256(TestVerifyRSASHA1):
@@ -218,3 +224,26 @@ def setUp(self):
218224

219225
class TestVerifyRSASHA512ChangeHeader(TestVerifyRSASHA1):
220226
sign_header = 'Signature'
227+
228+
229+
class TestVerifyHS2019PSS(TestVerifyHMACSHA1):
230+
231+
def setUp(self):
232+
private_key_path = os.path.join(
233+
os.path.dirname(__file__),
234+
'rsa_private_2048.pem')
235+
with open(private_key_path, 'rb') as f:
236+
private_key = f.read()
237+
238+
public_key_path = os.path.join(
239+
os.path.dirname(__file__),
240+
'rsa_public_2048.pem')
241+
with open(public_key_path, 'rb') as f:
242+
public_key = f.read()
243+
244+
self.keyId = "Test"
245+
self.algorithm = "hs2019"
246+
self.sign_secret = private_key
247+
self.verify_secret = public_key
248+
self.sign_algorithm = "PSS"
249+

0 commit comments

Comments
 (0)