tbtc - Disallow signatures with high-s values in DepositRedemption.provideRedemptionSignature
`DepositRedemption.provideRedemptionSignature` is used by signers to publish a signature that can be used to redeem a deposit on Bitcoin. The function accepts a signature s value in the upper half of the secp256k1 curve:\\n```\\nfunction provideRedemptionSignature(\\n    DepositUtils.Deposit storage \\_d,\\n    uint8 \\_v,\\n    bytes32 \\_r,\\n    bytes32 \\_s\\n) public {\\n    require(\\_d.inAwaitingWithdrawalSignature(), "Not currently awaiting a signature");\\n\\n    // If we're outside of the signature window, we COULD punish signers here\\n    // Instead, we consider this a no-harm-no-foul situation.\\n    // The signers have not stolen funds. Most likely they've just inconvenienced someone\\n\\n    // The signature must be valid on the pubkey\\n    require(\\n        \\_d.signerPubkey().checkSig(\\n            \\_d.lastRequestedDigest,\\n            \\_v, \\_r, \\_s\\n        ),\\n        "Invalid signature"\\n    );\\n```\\n\\nAlthough `ecrecover` accepts signatures with these s values, they are no longer used in Bitcoin. As such, the signature will appear to be valid to the Ethereum smart contract, but will likely not be accepted on Bitcoin. If no users watching malleate the signature, the redemption process will likely enter a fee increase loop, incurring a cost on the deposit owner.
Ensure the passed-in s value is restricted to the lower half of the secp256k1 curve, as done in BondedECDSAKeep:\\n```\\n// Validate `s` value for a malleability concern described in EIP-2.\\n// Only signatures with `s` value in the lower half of the secp256k1\\n// curve's order are considered valid.\\nrequire(\\n    uint256(\\_s) <=\\n        0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n    "Malleable signature - s should be in the low half of secp256k1 curve's order"\\n);\\n```\\n
```\\nfunction provideRedemptionSignature(\\n    DepositUtils.Deposit storage \\_d,\\n    uint8 \\_v,\\n    bytes32 \\_r,\\n    bytes32 \\_s\\n) public {\\n    require(\\_d.inAwaitingWithdrawalSignature(), "Not currently awaiting a signature");\\n\\n    // If we're outside of the signature window, we COULD punish signers here\\n    // Instead, we consider this a no-harm-no-foul situation.\\n    // The signers have not stolen funds. Most likely they've just inconvenienced someone\\n\\n    // The signature must be valid on the pubkey\\n    require(\\n        \\_d.signerPubkey().checkSig(\\n            \\_d.lastRequestedDigest,\\n            \\_v, \\_r, \\_s\\n        ),\\n        "Invalid signature"\\n    );\\n```\\n