from base64 import b64decode
from unittest.mock import mock_open, patch

import pytest

from ssb.util import load_ssb_secret, ConfigException


CONFIG_FILE = """
## Comments should be supported too
{
    "curve": "ed25519",
    "public": "rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=ed25519",
    "private": "/bqDBI/vGLD5qy3GxMsgHFgYIrrY08JfTzUaCYT6x0GuxikEhxezGNAB/Qk16z4wepPYMv4R+ilYoCnisZ4Q9A==",
    "id": "@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519"
}
"""

CONFIG_FILE_INVALID = CONFIG_FILE.replace('ed25519', 'foo')


def test_load_secret():
    with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE), create=True):
        secret = load_ssb_secret()

    priv_key = b'\xfd\xba\x83\x04\x8f\xef\x18\xb0\xf9\xab-\xc6\xc4\xcb \x1cX\x18"\xba\xd8\xd3\xc2_O5\x1a\t\x84\xfa\xc7A'

    assert secret['id'] == '@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519'
    assert bytes(secret['keypair']) == priv_key
    assert bytes(secret['keypair'].verify_key) == b64decode('rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=')


def test_load_exception():
    with pytest.raises(ConfigException):
        with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE_INVALID), create=True):
            load_ssb_secret()

5b967f34e98d8b0548f15e4e1eaa88edbfb7be0b
<mask token>

<mask token>


def test_load_secret():
    with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE), create=True):
        secret = load_ssb_secret()
    priv_key = (
        b'\xfd\xba\x83\x04\x8f\xef\x18\xb0\xf9\xab-\xc6\xc4\xcb \x1cX\x18"\xba\xd8\xd3\xc2_O5\x1a\t\x84\xfa\xc7A'
        )
    assert secret['id'
        ] == '@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519'
    assert bytes(secret['keypair']) == priv_key
    assert bytes(secret['keypair'].verify_key) == b64decode(
        'rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=')


def test_load_exception():
    with pytest.raises(ConfigException):
        with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE_INVALID
            ), create=True):
            load_ssb_secret()

<mask token>
CONFIG_FILE = """
## Comments should be supported too
{
    "curve": "ed25519",
    "public": "rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=ed25519",
    "private": "/bqDBI/vGLD5qy3GxMsgHFgYIrrY08JfTzUaCYT6x0GuxikEhxezGNAB/Qk16z4wepPYMv4R+ilYoCnisZ4Q9A==",
    "id": "@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519"
}
"""
CONFIG_FILE_INVALID = CONFIG_FILE.replace('ed25519', 'foo')


def test_load_secret():
    with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE), create=True):
        secret = load_ssb_secret()
    priv_key = (
        b'\xfd\xba\x83\x04\x8f\xef\x18\xb0\xf9\xab-\xc6\xc4\xcb \x1cX\x18"\xba\xd8\xd3\xc2_O5\x1a\t\x84\xfa\xc7A'
        )
    assert secret['id'
        ] == '@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519'
    assert bytes(secret['keypair']) == priv_key
    assert bytes(secret['keypair'].verify_key) == b64decode(
        'rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=')


def test_load_exception():
    with pytest.raises(ConfigException):
        with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE_INVALID
            ), create=True):
            load_ssb_secret()

from base64 import b64decode
from unittest.mock import mock_open, patch
import pytest
from ssb.util import load_ssb_secret, ConfigException
CONFIG_FILE = """
## Comments should be supported too
{
    "curve": "ed25519",
    "public": "rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=ed25519",
    "private": "/bqDBI/vGLD5qy3GxMsgHFgYIrrY08JfTzUaCYT6x0GuxikEhxezGNAB/Qk16z4wepPYMv4R+ilYoCnisZ4Q9A==",
    "id": "@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519"
}
"""
CONFIG_FILE_INVALID = CONFIG_FILE.replace('ed25519', 'foo')


def test_load_secret():
    with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE), create=True):
        secret = load_ssb_secret()
    priv_key = (
        b'\xfd\xba\x83\x04\x8f\xef\x18\xb0\xf9\xab-\xc6\xc4\xcb \x1cX\x18"\xba\xd8\xd3\xc2_O5\x1a\t\x84\xfa\xc7A'
        )
    assert secret['id'
        ] == '@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519'
    assert bytes(secret['keypair']) == priv_key
    assert bytes(secret['keypair'].verify_key) == b64decode(
        'rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=')


def test_load_exception():
    with pytest.raises(ConfigException):
        with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE_INVALID
            ), create=True):
            load_ssb_secret()

from base64 import b64decode
from unittest.mock import mock_open, patch

import pytest

from ssb.util import load_ssb_secret, ConfigException


CONFIG_FILE = """
## Comments should be supported too
{
    "curve": "ed25519",
    "public": "rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=ed25519",
    "private": "/bqDBI/vGLD5qy3GxMsgHFgYIrrY08JfTzUaCYT6x0GuxikEhxezGNAB/Qk16z4wepPYMv4R+ilYoCnisZ4Q9A==",
    "id": "@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519"
}
"""

CONFIG_FILE_INVALID = CONFIG_FILE.replace('ed25519', 'foo')


def test_load_secret():
    with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE), create=True):
        secret = load_ssb_secret()

    priv_key = b'\xfd\xba\x83\x04\x8f\xef\x18\xb0\xf9\xab-\xc6\xc4\xcb \x1cX\x18"\xba\xd8\xd3\xc2_O5\x1a\t\x84\xfa\xc7A'

    assert secret['id'] == '@rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=.ed25519'
    assert bytes(secret['keypair']) == priv_key
    assert bytes(secret['keypair'].verify_key) == b64decode('rsYpBIcXsxjQAf0JNes+MHqT2DL+EfopWKAp4rGeEPQ=')


def test_load_exception():
    with pytest.raises(ConfigException):
        with patch('ssb.util.open', mock_open(read_data=CONFIG_FILE_INVALID), create=True):
            load_ssb_secret()
