forked from LBRYCommunity/lbry-sdk
channel_sign command has customizeable salt
This commit is contained in:
parent
15dc52bd9a
commit
48c6873fc4
2 changed files with 16 additions and 7 deletions
|
@ -2943,19 +2943,21 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
|
|
||||||
@requires(WALLET_COMPONENT)
|
@requires(WALLET_COMPONENT)
|
||||||
async def jsonrpc_channel_sign(
|
async def jsonrpc_channel_sign(
|
||||||
self, channel_name=None, channel_id=None, hexdata=None, channel_account_id=None, wallet_id=None):
|
self, channel_name=None, channel_id=None, hexdata=None, salt=None,
|
||||||
|
channel_account_id=None, wallet_id=None):
|
||||||
"""
|
"""
|
||||||
Signs data using the specified channel signing key.
|
Signs data using the specified channel signing key.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
channel_sign [<channel_name> | --channel_name=<channel_name>]
|
channel_sign [<channel_name> | --channel_name=<channel_name>] [<channel_id> | --channel_id=<channel_id>]
|
||||||
[<channel_id> | --channel_id=<channel_id>] [<hexdata> | --hexdata=<hexdata>]
|
[<hexdata> | --hexdata=<hexdata>] [<salt> | --salt=<salt>]
|
||||||
[--channel_account_id=<channel_account_id>...] [--wallet_id=<wallet_id>]
|
[--channel_account_id=<channel_account_id>...] [--wallet_id=<wallet_id>]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--channel_name=<channel_name> : (str) name of channel used to sign (or use channel id)
|
--channel_name=<channel_name> : (str) name of channel used to sign (or use channel id)
|
||||||
--channel_id=<channel_id> : (str) claim id of channel used to sign (or use channel name)
|
--channel_id=<channel_id> : (str) claim id of channel used to sign (or use channel name)
|
||||||
--hexdata=<hexdata> : (str) data to sign, encoded as hexadecimal
|
--hexdata=<hexdata> : (str) data to sign, encoded as hexadecimal
|
||||||
|
--salt=<salt> : (str) salt to use for signing, default is to use timestamp
|
||||||
--channel_account_id=<channel_account_id>: (str) one or more account ids for accounts to look in
|
--channel_account_id=<channel_account_id>: (str) one or more account ids for accounts to look in
|
||||||
for channel certificates, defaults to all accounts.
|
for channel certificates, defaults to all accounts.
|
||||||
--wallet_id=<wallet_id> : (str) restrict operation to specific wallet
|
--wallet_id=<wallet_id> : (str) restrict operation to specific wallet
|
||||||
|
@ -2972,11 +2974,13 @@ class Daemon(metaclass=JSONRPCServerType):
|
||||||
signing_channel = await self.get_channel_or_error(
|
signing_channel = await self.get_channel_or_error(
|
||||||
wallet, channel_account_id, channel_id, channel_name, for_signing=True
|
wallet, channel_account_id, channel_id, channel_name, for_signing=True
|
||||||
)
|
)
|
||||||
timestamp = str(int(time.time()))
|
if salt is None:
|
||||||
signature = signing_channel.sign_data(unhexlify(str(hexdata)), timestamp)
|
salt = str(int(time.time()))
|
||||||
|
signature = signing_channel.sign_data(unhexlify(str(hexdata)), salt)
|
||||||
return {
|
return {
|
||||||
'signature': signature,
|
'signature': signature,
|
||||||
'signing_ts': timestamp
|
'signing_ts': salt, # DEPRECATED
|
||||||
|
'salt': salt,
|
||||||
}
|
}
|
||||||
|
|
||||||
@requires(WALLET_COMPONENT)
|
@requires(WALLET_COMPONENT)
|
||||||
|
|
|
@ -31,7 +31,7 @@ STREAM_TYPES = {
|
||||||
|
|
||||||
def verify(channel, data, signature, channel_hash=None):
|
def verify(channel, data, signature, channel_hash=None):
|
||||||
pieces = [
|
pieces = [
|
||||||
signature['signing_ts'].encode(),
|
signature['salt'].encode(),
|
||||||
channel_hash or channel.claim_hash,
|
channel_hash or channel.claim_hash,
|
||||||
data
|
data
|
||||||
]
|
]
|
||||||
|
@ -1239,8 +1239,13 @@ class ChannelCommands(CommandTestCase):
|
||||||
channel = channel_tx.outputs[0]
|
channel = channel_tx.outputs[0]
|
||||||
signature1 = await self.out(self.daemon.jsonrpc_channel_sign(channel_name='@signer', hexdata=data_to_sign))
|
signature1 = await self.out(self.daemon.jsonrpc_channel_sign(channel_name='@signer', hexdata=data_to_sign))
|
||||||
signature2 = await self.out(self.daemon.jsonrpc_channel_sign(channel_id=channel.claim_id, hexdata=data_to_sign))
|
signature2 = await self.out(self.daemon.jsonrpc_channel_sign(channel_id=channel.claim_id, hexdata=data_to_sign))
|
||||||
|
signature3 = await self.out(self.daemon.jsonrpc_channel_sign(channel_id=channel.claim_id, hexdata=data_to_sign, salt='beef'))
|
||||||
|
signature4 = await self.out(self.daemon.jsonrpc_channel_sign(channel_id=channel.claim_id, hexdata=data_to_sign, salt='beef'))
|
||||||
|
self.assertNotEqual(signature2, signature3)
|
||||||
|
self.assertEqual(signature3, signature4)
|
||||||
self.assertTrue(verify(channel, unhexlify(data_to_sign), signature1))
|
self.assertTrue(verify(channel, unhexlify(data_to_sign), signature1))
|
||||||
self.assertTrue(verify(channel, unhexlify(data_to_sign), signature2))
|
self.assertTrue(verify(channel, unhexlify(data_to_sign), signature2))
|
||||||
|
self.assertTrue(verify(channel, unhexlify(data_to_sign), signature3))
|
||||||
signature3 = await self.out(self.daemon.jsonrpc_channel_sign(channel_id=channel.claim_id, hexdata=99))
|
signature3 = await self.out(self.daemon.jsonrpc_channel_sign(channel_id=channel.claim_id, hexdata=99))
|
||||||
self.assertTrue(verify(channel, unhexlify('99'), signature3))
|
self.assertTrue(verify(channel, unhexlify('99'), signature3))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue