mirror of https://gitlab.com/bashrc2/epicyon
hs2019 same as rsa256
parent
8f50983816
commit
d98e68be5b
31
httpsig.py
31
httpsig.py
|
@ -312,7 +312,8 @@ def verifyPostHeaders(httpPrefix: str, publicKeyPem: str, headers: dict,
|
||||||
if v.startswith('('):
|
if v.startswith('('):
|
||||||
requestTargetKey = k
|
requestTargetKey = k
|
||||||
requestTargetStr = v[1:-1]
|
requestTargetStr = v[1:-1]
|
||||||
break
|
elif v.startswith('"'):
|
||||||
|
signatureDict[k] = v[1:-1]
|
||||||
if not requestTargetKey:
|
if not requestTargetKey:
|
||||||
return False
|
return False
|
||||||
signatureDict[requestTargetKey] = requestTargetStr
|
signatureDict[requestTargetKey] = requestTargetStr
|
||||||
|
@ -354,6 +355,8 @@ def verifyPostHeaders(httpPrefix: str, publicKeyPem: str, headers: dict,
|
||||||
elif signedHeader == 'algorithm':
|
elif signedHeader == 'algorithm':
|
||||||
if headers.get(signedHeader):
|
if headers.get(signedHeader):
|
||||||
algorithm = headers[signedHeader]
|
algorithm = headers[signedHeader]
|
||||||
|
if debug:
|
||||||
|
print('http signature algorithm: ' + algorithm)
|
||||||
elif signedHeader == 'digest':
|
elif signedHeader == 'digest':
|
||||||
if messageBodyDigest:
|
if messageBodyDigest:
|
||||||
bodyDigest = messageBodyDigest
|
bodyDigest = messageBodyDigest
|
||||||
|
@ -447,20 +450,30 @@ def verifyPostHeaders(httpPrefix: str, publicKeyPem: str, headers: dict,
|
||||||
print('signature: ' + algorithm + ' ' +
|
print('signature: ' + algorithm + ' ' +
|
||||||
signatureDict['signature'])
|
signatureDict['signature'])
|
||||||
|
|
||||||
|
# log unusual signing algorithms
|
||||||
|
if signatureDict.get('alg'):
|
||||||
|
print('http signature algorithm: ' + signatureDict['alg'])
|
||||||
|
|
||||||
# If extra signing algorithms need to be added then do it here
|
# If extra signing algorithms need to be added then do it here
|
||||||
if algorithm == 'rsa-sha256':
|
if not signatureDict.get('alg'):
|
||||||
headerDigest = getSHA256(signedHeaderText.encode('ascii'))
|
|
||||||
paddingStr = padding.PKCS1v15()
|
|
||||||
alg = hazutils.Prehashed(hashes.SHA256())
|
alg = hazutils.Prehashed(hashes.SHA256())
|
||||||
elif algorithm == 'rsa-sha512':
|
elif signatureDict['alg'] == 'rsa-sha256':
|
||||||
headerDigest = getSHA512(signedHeaderText.encode('ascii'))
|
alg = hazutils.Prehashed(hashes.SHA256())
|
||||||
paddingStr = padding.PKCS1v15()
|
elif signatureDict['alg'] == 'hs2019':
|
||||||
|
alg = hazutils.Prehashed(hashes.SHA256())
|
||||||
|
elif signatureDict['alg'] == 'rsa-sha512':
|
||||||
alg = hazutils.Prehashed(hashes.SHA512())
|
alg = hazutils.Prehashed(hashes.SHA512())
|
||||||
else:
|
else:
|
||||||
print('Unknown http signature algorithm: ' + algorithm)
|
|
||||||
paddingStr = padding.PKCS1v15()
|
|
||||||
alg = hazutils.Prehashed(hashes.SHA256())
|
alg = hazutils.Prehashed(hashes.SHA256())
|
||||||
|
|
||||||
|
if algorithm == 'rsa-sha256' or algorithm == 'hs2019':
|
||||||
|
headerDigest = getSHA256(signedHeaderText.encode('ascii'))
|
||||||
|
elif algorithm == 'rsa-sha512':
|
||||||
|
headerDigest = getSHA512(signedHeaderText.encode('ascii'))
|
||||||
|
else:
|
||||||
|
print('Unknown http signature algorithm: ' + algorithm)
|
||||||
headerDigest = ''
|
headerDigest = ''
|
||||||
|
paddingStr = padding.PKCS1v15()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
pubkey.verify(signature, headerDigest, paddingStr, alg)
|
pubkey.verify(signature, headerDigest, paddingStr, alg)
|
||||||
|
|
3
tests.py
3
tests.py
|
@ -623,9 +623,10 @@ def _testHttpsigBase(withDigest: bool, baseDir: str):
|
||||||
|
|
||||||
headers['signature'] = signatureHeader
|
headers['signature'] = signatureHeader
|
||||||
GETmethod = not withDigest
|
GETmethod = not withDigest
|
||||||
|
debug = True
|
||||||
assert verifyPostHeaders(httpPrefix, publicKeyPem, headers,
|
assert verifyPostHeaders(httpPrefix, publicKeyPem, headers,
|
||||||
boxpath, GETmethod, None,
|
boxpath, GETmethod, None,
|
||||||
messageBodyJsonStr, False)
|
messageBodyJsonStr, debug)
|
||||||
if withDigest:
|
if withDigest:
|
||||||
# everything correct except for content-length
|
# everything correct except for content-length
|
||||||
headers['content-length'] = str(contentLength + 2)
|
headers['content-length'] = str(contentLength + 2)
|
||||||
|
|
Loading…
Reference in New Issue