Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setup issue #234

Open
GrimmSnark opened this issue Aug 29, 2024 · 1 comment
Open

Setup issue #234

GrimmSnark opened this issue Aug 29, 2024 · 1 comment

Comments

@GrimmSnark
Copy link

Hello,

So I am trying to get sortingview working for spikeinterface. However when I run the kachery-cloud-init I get the following error. Any advice would be greatly appreciated.

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\ProgramData\anaconda3\envs\si_env2\Scripts\kachery-cloud-init.exe\__main__.py", line 7, in <module>
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\click\core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\click\core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\click\core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\click\core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\kachery_cloud\cli.py", line 13, in init
    kc.init()
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\kachery_cloud\init.py", line 62, in init
    client_info = get_client_info()
                  ^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\kachery_cloud\init.py", line 52, in get_client_info
    response = _kachery_gateway_request(payload)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\kachery_cloud\_kachery_gateway_request.py", line 20, in _kachery_gateway_request
    'signature': _sign_message_as_client(payload)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\kachery_cloud\_client_keys.py", line 57, in _sign_message_as_client
    return _sign_message(msg, public_key_hex, private_key_hex)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\ProgramData\anaconda3\envs\si_env2\Lib\site-packages\kachery_cloud\_client_keys.py", line 110, in _sign_message
    pubk.verify(bytes.fromhex(signature), msg_bytes)
cryptography.exceptions.InvalidSignature
@magland
Copy link
Owner

magland commented Aug 29, 2024

Hi @GrimmSnark

I haven't personally tested on windows, so this might be OS-specific.

Please try running the following script. On my Linux machine it succeeds and prints "Success". I'm curious on whether it works for you on windows. We can take it from there.

def _generate_keypair():
    from cryptography.hazmat.primitives import serialization
    from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
    privk = Ed25519PrivateKey.generate()
    pubk = privk.public_key()
    private_key_hex = privk.private_bytes(
        encoding=serialization.Encoding.Raw,
        format=serialization.PrivateFormat.Raw,
        encryption_algorithm=serialization.NoEncryption()
    ).hex()
    public_key_hex = pubk.public_bytes(
        encoding=serialization.Encoding.Raw,
        format=serialization.PublicFormat.Raw
    ).hex()
    test_msg = b'123'
    test_signature = _sign_message(test_msg, public_key_hex, private_key_hex)
    assert _verify_signature(test_msg, public_key_hex, test_signature)
    return public_key_hex, private_key_hex


def _verify_signature(msg: bytes, public_key_hex: str, signature: str):
    from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
    pubk = Ed25519PublicKey.from_public_bytes(bytes.fromhex(public_key_hex))
    try:
        pubk.verify(bytes.fromhex(signature), msg)
    except Exception:
        return False
    return True


def _sign_message(msg: bytes, public_key_hex: str, private_key_hex: str) -> str:
    from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey, Ed25519PublicKey
    privk = Ed25519PrivateKey.from_private_bytes(bytes.fromhex(private_key_hex))
    pubk = Ed25519PublicKey.from_public_bytes(bytes.fromhex(public_key_hex))
    signature = privk.sign(msg).hex()
    pubk.verify(bytes.fromhex(signature), msg)
    return signature

public_key_hex, private_key_hex = _generate_keypair()
_sign_message(b'123', public_key_hex, private_key_hex)
print('Success')

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants