def sign(data, key): """ Sign the JSON data with the passed key. """ now = datetime.datetime.utcnow().replace(microsecond=0).isoformat() + "Z" header = dict(alg="ES256", jwk=key.serialize()) protected = dict(formatLength=len(data) - 2, formatTail=jws.b64encode_item(data[-2:]), time=now) _jws = jws.JWS(data, **header) protectedHeader, payload, signature = _jws.sign_compact([key], protected=protected).split(".") signatures = [dict(header=header, signature=signature, protected=protectedHeader)] jsig = _jsonDumps(dict(signatures=signatures))[1:-2] arr = [data[:-2], ",", jsig, data[-2:]] # Add the signature block at the end of the json string, keeping the formatting data_with_signature = "".join(arr) return data_with_signature
def sign(data, key): """ Sign the JSON document with a elliptic curve key """ jdata = _jsonDumps(data) now = datetime.datetime.utcnow().replace(microsecond=0).isoformat() + 'Z' header = dict(alg="ES256", jwk=key.serialize()) protected = dict(formatLength=len(jdata) - 2, formatTail=jws.b64encode_item(jdata[-2:]), time=now) _jws = jws.JWS(jdata, **header) protectedHeader, payload, signature = _jws.sign_compact([key], protected=protected).split(".") signatures = [dict(header=header, signature=signature, protected=protectedHeader)] jsig = _jsonDumps(dict(signatures=signatures))[1:-2] arr = [jdata[:-2], ',', jsig, jdata[-2:]] # Add the signature block at the end of the json string, keeping the # formatting jdata2 = ''.join(arr) return jdata2