Skip to main content

Cryptographically strong pseudorandom key generator based on the XStrip Algorithm

Project description

xstrip-auth

Cryptographically strong pseudorandom key generator based on the XStrip Algorithm

PyPI Version License Python Version

Installing

Via PyPI:

pip install xstrip_auth

Usage

Generate a 256-bit key for use

from xstrip_auth import XStripKeyConstruct

key = "#P@$$W0R9"
construct = XStripKeyConstruct(key)

# Creating a 16Bit key for use from the key under a md5 hash implementation
construct.generateKey(hf='md5')
# Prints
#   [md5](16): 'ec1a93e0f8d41d75ffb77914e7a31cbf'

# Create a 256bit key for use from the key under the sha256 hash implementation
construct.generateKey(hf='sha256')
# Prints
#   [sha256](32): 'd6b05d17e2e15152c478825ca6e7adafd0045b0c7fd92850ead98bad0cced9a4'

API

Class: XStripKey(hash, salt[, iterations][, hf])

  • hash: <bytes> The key, final content to be encapsulated by the instance
  • salt: <bytes> The salt used to intensify the operation
  • iterations: <number> Number of iterations undergone to generate the hash. Default: 100000
  • hf: <string> Hash function used for the operation. Default: 'sha256'

Encapsulate a generated key within an interfacing instance for managing the inherent content

The XStripKey class is defined and exposed publicly by the module:

from xstrip_auth import XStripKey

key = XStripKey(bytes.fromhex('d4d64d71c71ed5365ddde126ca8e6a17301e5f9601a15119e53c2f91def21f11'),
                bytes.fromhex('422f487975c57bb648f3'))

print(key.verify("#P@$$W0R9"))

# Prints
#   True

XStripKey::hex(getter)

Shows the encapsulated key in byte hex format

XStripKey::hf(getter)

Returns the hash function of the key

XStripKey::salt(getter)

Returns the salt of the key in bytes

XStripKey::iterations(getter)

Returns the number of iterations used in encoding the key

XStripKey::verify(key[, encoder])

  • key: <string>
  • encoder: <function>

Returns: <boolean>

Verify whether or not the specified key matches the inherent key of the self instance encoder is defined by any transformers that was used used in generating the construct else, this falls back to a noop function that returns its parameters Returns a boolean for the condition result

XStripKey::matchExec(key, fn[, *args][, encoder])

  • key: <string>
  • fn: <function>
  • *args: <any>
  • encoder: <function>

Returns: <any>

Execute the fn function if the key matches the inherent key of the self instance by checking self.verify(key, encoder) fn is called by arguments defined in args (if-any) encoder is defined by any transformers that was used used in generating the construct else, this falls back to a noop function that returns its parameters Returns the return content of the function fn

def fn(value):
  print("Password Matches, arg: %d" % value)

key.matchExec("#P@$$W0R9", fn, 10)

# Prints
#   Password Matches, arg: 10

XStripKey::mismatchExec(key, fn[, *args][, encoder])

  • key: <string>
  • fn: <function>
  • *args: <any>
  • encoder: <function>

Returns: <any>

Execute the fn function if the key does not match the inherent key of the self instance by checking self.verify(key, encoder) fn is called by arguments defined in args (if-any) encoder is defined by any transformers that was used used in generating the construct else, this falls back to a noop function that returns its parameters Returns the return content of the function fn

def fn(value):
  print("Password Matches, arg: %d" % value)

key.mismatchExec("something", fn, 19)

# Prints
#   Password Matches, arg: 19

XStripKey::codes()

Returns the octal representation of each character in a list

XStripKey::export()

Exports the entire key construct in base64 encoding parsable by XStripKey.parse()

print(key.export())

# Prints
#   b'MTAwMDAwOjQyMmY0ODc5NzVjNTdiYjY0OGYzL2Q0Z...OGU2YTE3MzAxZTVmOTYwMWExNTExOWU1M2MyZjkxZGVmMjFmMTE='

XStripKey.parse(content)

  • fn: <string | bytes> The exported construct to be parsed Returns: <XStripKey>

Parse the base64 exported data from XStripKey::export

print(XStripKey.parse(key.export()))
print(key == XStripKey.parse(key.export()))

# Prints
#   [sha256](32): 'd4d64d71c71ed5365ddde126ca8e6a17301e5f9601a15119e53c2f91def21f11'
#   True

Class: XStripKeyConstruct(key[, iterations])

  • key: <string | bytes> The key to be constructed on
  • iterations: <number> The number of times the kdf should apply the hash function to the key in the transformative process

Class to generate series of hashed keys for a single key Making the product pseudorandomly secure for every use of the same key

The XStripKey class is defined and exposed publicly by the module:

from xstrip_auth import XStripKeyConstruct

XStripKey::generateKey([hf][, salt][, encoder])

  • hf: <string> The hash function to process the key on. Default: 'sha256'
  • salt: <string | bytes> The hash to be used on the key when randomising the data. Default: py:os/random
  • encoder: <function> The middleware transformative function. Default: noop

Returns: <XStripKey>

Generates a special key for the encapsulated key under special conditions making the product completely random and untied to the operation Hence, generating cryptographically secure keys everytime this method is called encoder is defined by any transformers that was used used in generating the construct else, this falls back to a noop function that returns its parameters

construct = XStripKeyConstruct("t0y$t0ry")

construct.generateKey()
 # [sha256](32): '5e53edcff3bc4dc5e06b243dd206e4dbba1be625361bd2db3c9599edec217f01'
construct.generateKey()
 # [sha256](32): '907d183f27a75c23830906063494ff073942e3f74d21605f7b19b16a7d94df06'
construct.generateKey('md5')
 # [md5](16): 'd38518dccec4a4ef1767c01e48095a2c'
construct.generateKey('sha1')
 # [sha1](20): '42f405740cd7a35a283b44c1ee0bbf0c9812015b'

Development

Building

Feel free to clone, use in adherance to the license and perhaps send pull requests

git clone https://github.com/miraclx/xstrip-auth.git
cd xstrip-auth
# hack on code
pip3 install . --user

License

Apache 2.0 © Miraculous Owonubi (@miraclx) <omiraculous@gmail.com>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xstrip_auth-0.2.1.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xstrip_auth-0.2.1-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file xstrip_auth-0.2.1.tar.gz.

File metadata

  • Download URL: xstrip_auth-0.2.1.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for xstrip_auth-0.2.1.tar.gz
Algorithm Hash digest
SHA256 c070b88f37a23135585dd037cf508504e2ff2114937bda3afc2df19463c652a8
MD5 7073f666b7c72f32fcf249164006cd66
BLAKE2b-256 b8f5914438e68a58d7d6eb4caa9bdda49a3d759d6eb98d6c9cc2f25199d28e22

See more details on using hashes here.

File details

Details for the file xstrip_auth-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: xstrip_auth-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3

File hashes

Hashes for xstrip_auth-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f9053c9009022faab1334e97acdecd977a5fcf66ec832e9fee4de58a10bf8f9e
MD5 02845be74eaf11ee2e4be61a264bb8d6
BLAKE2b-256 d93940c3b15de82a97396b90641f1b9a5cd7720fe3374162afe40d99eddeb1d0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page