bittensor.keyfile#

Module Contents#

Classes#

Mockkeyfile

The Mockkeyfile is a mock object representing a keyfile that does not exist on the device.

keyfile

Defines an interface for a substrate interface keypair stored on device.

Functions#

ask_password_to_encrypt()

Prompts the user to enter a password for key encryption.

decrypt_keyfile_data(keyfile_data[, password, ...])

Decrypts the passed keyfile data using ansible vault.

deserialize_keypair_from_keyfile_data(keyfile_data)

Deserializes Keypair object from passed keyfile data.

encrypt_keyfile_data(keyfile_data[, password])

Encrypts the passed keyfile data using ansible vault.

get_coldkey_password_from_environment(coldkey_name)

Retrieves the cold key password from the environment variables.

keyfile_data_encryption_method(keyfile_data)

Returns true if the keyfile data is encrypted.

keyfile_data_is_encrypted(keyfile_data)

Returns true if the keyfile data is encrypted.

keyfile_data_is_encrypted_ansible(keyfile_data)

Returns true if the keyfile data is ansible encrypted.

keyfile_data_is_encrypted_legacy(keyfile_data)

Returns true if the keyfile data is legacy encrypted.

keyfile_data_is_encrypted_nacl(keyfile_data)

Returns true if the keyfile data is NaCl encrypted.

legacy_encrypt_keyfile_data(keyfile_data[, password])

serialized_keypair_to_keyfile_data(keypair)

Serializes keypair object into keyfile data.

validate_password(password)

Validates the password against a password policy.

Attributes#

NACL_SALT

class bittensor.keyfile.Mockkeyfile(path)#

The Mockkeyfile is a mock object representing a keyfile that does not exist on the device.

It is designed for use in testing scenarios and simulations where actual filesystem operations are not required. The keypair stored in the Mockkeyfile is treated as non-encrypted and the data is stored as a serialized string.

Parameters:

path (str) –

property data#

Returns the serialized keypair data stored in the keyfile.

Returns:

The serialized keypair data.

Return type:

bytes

property keypair#

Returns the mock keypair stored in the keyfile.

Returns:

The mock keypair.

Return type:

bittensor.Keypair

__repr__()#

Returns a string representation of the Mockkeyfile, same as __str__().

Returns:

The string representation of the Mockkeyfile.

Return type:

str

__str__()#

Returns a string representation of the Mockkeyfile. The representation will indicate if the keyfile is empty, encrypted, or decrypted.

Returns:

The string representation of the Mockkeyfile.

Return type:

str

check_and_update_encryption(no_prompt=None, print_result=False)#
decrypt(password=None)#

Returns without doing anything since the mock keyfile is not encrypted.

Parameters:

password (str, optional) – Ignored in this context. Defaults to None.

encrypt(password=None)#

Raises a ValueError since encryption is not supported for the mock keyfile.

Parameters:

password (str, optional) – Ignored in this context. Defaults to None.

Raises:

ValueError – Always raises this exception for Mockkeyfile.

exists_on_device()#

Returns True indicating that the mock keyfile exists on the device (although it is not created on the actual file system).

Returns:

Always returns True for Mockkeyfile.

Return type:

bool

get_keypair(password=None)#

Returns the mock keypair stored in the keyfile. The password parameter is ignored.

Parameters:

password (str, optional) – Ignored in this context. Defaults to None.

Returns:

The mock keypair stored in the keyfile.

Return type:

bittensor.Keypair

is_encrypted()#

Returns False indicating that the mock keyfile is not encrypted.

Returns:

Always returns False for Mockkeyfile.

Return type:

bool

is_readable()#

Returns True indicating that the mock keyfile is readable (although it is not read from the actual file system).

Returns:

Always returns True for Mockkeyfile.

Return type:

bool

is_writable()#

Returns True indicating that the mock keyfile is writable (although it is not written to the actual file system).

Returns:

Always returns True for Mockkeyfile.

Return type:

bool

make_dirs()#

Creates the directories for the mock keyfile. Does nothing in this class, since no actual filesystem operations are needed.

set_keypair(keypair, encrypt=True, overwrite=False, password=None)#

Sets the mock keypair in the keyfile. The encrypt and overwrite parameters are ignored.

Parameters:
  • keypair (bittensor.Keypair) – The mock keypair to be set.

  • encrypt (bool, optional) – Ignored in this context. Defaults to True.

  • overwrite (bool, optional) – Ignored in this context. Defaults to False.

  • password (str, optional) – Ignored in this context. Defaults to None.

bittensor.keyfile.NACL_SALT = b'\x13q\x83\xdf\xf1Z\t\xbc\x9c\x90\xb5Q\x879\xe9\xb1'#
bittensor.keyfile.ask_password_to_encrypt()#

Prompts the user to enter a password for key encryption.

Returns:

The valid password entered by the user.

Return type:

password (str)

bittensor.keyfile.decrypt_keyfile_data(keyfile_data, password=None, coldkey_name=None)#

Decrypts the passed keyfile data using ansible vault.

Parameters:
  • keyfile_data (bytes) – The bytes to decrypt.

  • password (str, optional) – The password used to decrypt the data. If None, asks for user input.

  • coldkey_name (str, optional) – The name of the cold key. If provided, retrieves the password from environment variables.

Returns:

The decrypted data.

Return type:

decrypted_data (bytes)

Raises:

KeyFileError – Raised if the file is corrupted or if the password is incorrect.

bittensor.keyfile.deserialize_keypair_from_keyfile_data(keyfile_data)#

Deserializes Keypair object from passed keyfile data.

Parameters:

keyfile_data (bytes) – The keyfile data as bytes to be loaded.

Returns:

The Keypair loaded from bytes.

Return type:

keypair (bittensor.Keypair)

Raises:

KeyFileError – Raised if the passed bytes cannot construct a keypair object.

bittensor.keyfile.encrypt_keyfile_data(keyfile_data, password=None)#

Encrypts the passed keyfile data using ansible vault.

Parameters:
  • keyfile_data (bytes) – The bytes to encrypt.

  • password (str, optional) – The password used to encrypt the data. If None, asks for user input.

Returns:

The encrypted data.

Return type:

encrypted_data (bytes)

bittensor.keyfile.get_coldkey_password_from_environment(coldkey_name)#

Retrieves the cold key password from the environment variables.

Parameters:

coldkey_name (str) – The name of the cold key.

Returns:

The password retrieved from the environment variables, or None if not found.

Return type:

password (str)

class bittensor.keyfile.keyfile(path)#

Defines an interface for a substrate interface keypair stored on device.

Parameters:

path (str) –

property data: bytes#

Returns the keyfile data under path.

Returns:

The keyfile data stored under the path.

Return type:

keyfile_data (bytes)

Raises:

KeyFileError – Raised if the file does not exist, is not readable, or writable.

property keyfile_data: bytes#

Returns the keyfile data under path.

Returns:

The keyfile data stored under the path.

Return type:

keyfile_data (bytes)

Raises:

KeyFileError – Raised if the file does not exist, is not readable, or writable.

property keypair: bittensor.Keypair#

Returns the keypair from path, decrypts data if the file is encrypted.

Returns:

The keypair stored under the path.

Return type:

keypair (bittensor.Keypair)

Raises:

KeyFileError – Raised if the file does not exist, is not readable, writable, corrupted, or if the password is incorrect.

__repr__()#

Return repr(self).

__str__()#

Return str(self).

_may_overwrite()#

Asks the user if it is okay to overwrite the file.

Returns:

True if the user allows overwriting the file.

Return type:

may_overwrite (bool)

_read_keyfile_data_from_file()#

Reads the keyfile data from the file.

Returns:

The keyfile data stored under the path.

Return type:

keyfile_data (bytes)

Raises:

KeyFileError – Raised if the file does not exist or is not readable.

_write_keyfile_data_to_file(keyfile_data, overwrite=False)#

Writes the keyfile data to the file.

Parameters:
  • keyfile_data (bytes) – The byte data to store under the path.

  • overwrite (bool, optional) – If True, overwrites the data without asking for permission from the user. Default is False.

Raises:

KeyFileError – Raised if the file is not writable or the user responds No to the overwrite prompt.

check_and_update_encryption(print_result=True, no_prompt=False)#

Check the version of keyfile and update if needed.

Parameters:
  • print_result (bool) – Print the checking result or not.

  • no_prompt (bool) – Skip if no prompt.

Raises:

KeyFileError – Raised if the file does not exists, is not readable, writable.

Returns:

Return True if the keyfile is the most updated with nacl, else False.

Return type:

result (bool)

decrypt(password=None)#

Decrypts the file under the path.

Parameters:

password (str, optional) – The password for decryption. If None, asks for user input.

Raises:

KeyFileError – Raised if the file does not exist, is not readable, writable, corrupted, or if the password is incorrect.

encrypt(password=None)#

Encrypts the file under the path.

Parameters:

password (str, optional) – The password for encryption. If None, asks for user input.

Raises:

KeyFileError – Raised if the file does not exist, is not readable, or writable.

exists_on_device()#

Returns True if the file exists on the device.

Returns:

True if the file is on the device.

Return type:

on_device (bool)

get_keypair(password=None)#

Returns the keypair from the path, decrypts data if the file is encrypted.

Parameters:

password (str, optional) – The password used to decrypt the file. If None, asks for user input.

Returns:

The keypair stored under the path.

Return type:

keypair (bittensor.Keypair)

Raises:

KeyFileError – Raised if the file does not exist, is not readable, writable, corrupted, or if the password is incorrect.

is_encrypted()#

Returns True if the file under path is encrypted.

Returns:

True if the file is encrypted.

Return type:

encrypted (bool)

is_readable()#

Returns True if the file under path is readable.

Returns:

True if the file is readable.

Return type:

readable (bool)

is_writable()#

Returns True if the file under path is writable.

Returns:

True if the file is writable.

Return type:

writable (bool)

make_dirs()#

Creates directories for the path if they do not exist.

set_keypair(keypair, encrypt=True, overwrite=False, password=None)#

Writes the keypair to the file and optionally encrypts data.

Parameters:
  • keypair (bittensor.Keypair) – The keypair to store under the path.

  • encrypt (bool, optional) – If True, encrypts the file under the path. Default is True.

  • overwrite (bool, optional) – If True, forces overwrite of the current file. Default is False.

  • password (str, optional) – The password used to encrypt the file. If None, asks for user input.

Raises:

KeyFileError – Raised if the file does not exist, is not readable, writable, or if the password is incorrect.

bittensor.keyfile.keyfile_data_encryption_method(keyfile_data)#

Returns true if the keyfile data is encrypted.

Parameters:

keyfile_data (bytes, required) – Bytes to validate

Returns:

True if data is encrypted.

Return type:

encryption_method (bool)

bittensor.keyfile.keyfile_data_is_encrypted(keyfile_data)#

Returns true if the keyfile data is encrypted.

Parameters:

keyfile_data (bytes) – The bytes to validate.

Returns:

True if the data is encrypted.

Return type:

is_encrypted (bool)

bittensor.keyfile.keyfile_data_is_encrypted_ansible(keyfile_data)#

Returns true if the keyfile data is ansible encrypted.

Parameters:

keyfile_data (bytes) – The bytes to validate.

Returns:

True if the data is ansible encrypted.

Return type:

is_ansible (bool)

bittensor.keyfile.keyfile_data_is_encrypted_legacy(keyfile_data)#

Returns true if the keyfile data is legacy encrypted. :param keyfile_data: The bytes to validate. :type keyfile_data: bytes

Returns:

True if the data is legacy encrypted.

Return type:

is_legacy (bool)

Parameters:

keyfile_data (bytes) –

bittensor.keyfile.keyfile_data_is_encrypted_nacl(keyfile_data)#

Returns true if the keyfile data is NaCl encrypted.

Parameters:

keyfile_data (bytes, required) – Bytes to validate.

Returns:

True if data is ansible encrypted.

Return type:

is_nacl (bool)

bittensor.keyfile.legacy_encrypt_keyfile_data(keyfile_data, password=None)#
Parameters:
  • keyfile_data (bytes) –

  • password (str) –

Return type:

bytes

bittensor.keyfile.serialized_keypair_to_keyfile_data(keypair)#

Serializes keypair object into keyfile data.

Parameters:

keypair (bittensor.Keypair) – The keypair object to be serialized.

Returns:

Serialized keypair data.

Return type:

data (bytes)

bittensor.keyfile.validate_password(password)#

Validates the password against a password policy.

Parameters:

password (str) – The password to verify.

Returns:

True if the password meets validity requirements.

Return type:

valid (bool)