Skip to main content

BIS512 - Custom 512-bit cryptographic hash function for blockchain

Project description

BIS512 - Custom 512-bit Cryptographic Hash Function

Author: Biswajit Saha

A secure, ASIC-resistant hash function designed for blockchain applications.

Features

  • 512-bit output (128 hex characters)
  • ASIC-resistant - Fair CPU/GPU mining
  • Strong avalanche effect (49.7% bit change)
  • No collisions detected in 5000+ tests
  • Pure Python - Works everywhere, no compiler needed
  • Fast enough for blockchain applications

Installation

pip install bis512

User Guide for BIS512 Hash Function

📦 Installation

pip install bis512

🚀 Basic Usage

# Import the hash function
from bis512 import hash_string, hash_bytes, hash_hex

# Method 1: Hash a string (returns hex string)
hash_value = hash_string("Hello, World!")
print(hash_value)
# Output: 128-character hexadecimal string

# Method 2: Hash bytes (returns bytes)
data = b"Blockchain data"
hash_bytes_result = hash_bytes(data)

# Method 3: Hash bytes and get hex
hex_result = hash_hex(b"Any input data")

💡 Quick Examples

from bis512 import hash

# Hash a simple message
print(hash("hello"))

# Hash a number
print(hash(str(12345)))

# Hash in a loop
for i in range(5):
    print(hash(f"message_{i}"))

# Hash from file
with open("myfile.txt", "rb") as f:
    file_hash = hash(f.read().decode())
    print(file_hash)

🔗 For Blockchain Applications

from bis512 import hash

# Block header hashing
def hash_block(previous_hash, transactions, nonce):
    block_data = f"{previous_hash}{transactions}{nonce}"
    return hash(block_data)

# Merkle tree hashing
def merkle_root(transactions):
    if len(transactions) == 1:
        return hash(transactions[0])
    
    new_level = []
    for i in range(0, len(transactions), 2):
        left = transactions[i]
        right = transactions[i+1] if i+1 < len(transactions) else left
        combined = left + right
        new_level.append(hash(combined))
    
    return merkle_root(new_level)

# Transaction hashing
def hash_transaction(sender, receiver, amount, timestamp):
    tx_data = f"{sender}{receiver}{amount}{timestamp}"
    return hash(tx_data)

🏗️ Mining Example

from bis512 import hash

def mine_block(previous_hash, transactions, difficulty):
    nonce = 0
    target = "0" * difficulty
    
    while True:
        block_data = f"{previous_hash}{transactions}{nonce}"
        block_hash = hash(block_data)
        
        if block_hash[:difficulty] == target:
            return nonce, block_hash
        nonce += 1

# Mine with difficulty 4
nonce, block_hash = mine_block("previous_hash_here", "transactions_data", 4)
print(f"Mined! Nonce: {nonce}, Hash: {block_hash}")

📝 Command Line Usage

# Quick hash from terminal
python -c "from bis512 import hash; print(hash('hello'))"

# Hash from file content
python -c "from bis512 import hash; print(hash(open('file.txt').read()))"

# Hash multiple inputs
python -c "from bis512 import hash; [print(hash(f'input_{i}')) for i in range(10)]"

🔐 Password Hashing Example

from bis512 import hash
import getpass

# Simple password hashing
password = getpass.getpass("Enter password: ")
password_hash = hash(password)
print(f"Password hash: {password_hash}")

# Verify password
def verify_password(input_password, stored_hash):
    return hash(input_password) == stored_hash

# Usage
stored = hash("mysecret123")
is_valid = verify_password("mysecret123", stored)
print(f"Password valid: {is_valid}")

📊 Performance Testing

from bis512 import hash
import time

# Test speed
start = time.time()
for i in range(100):
    hash(f"test_message_{i}")
end = time.time()

print(f"100 hashes in {end-start:.2f} seconds")
print(f"Speed: {100/(end-start):.0f} hashes/second")

🧪 Testing Different Inputs

from bis512 import hash

test_inputs = [
    "a",
    "aa", 
    "aaa",
    "Hello World",
    "Blockchain Technology",
    "1234567890",
    "The quick brown fox jumps over the lazy dog"
]

for inp in test_inputs:
    h = hash(inp)
    print(f"Input: {inp:40} -> Hash: {h[:16]}...")

⚠️ Important Notes

  1. Output is always 128 hex characters (512 bits)
  2. Same input always produces same hash
  3. Different inputs produce completely different hashes
  4. Pure Python - no external dependencies

🆘 Need Help?

# Check version
import bis512
print(f"BIS512 version: {bis512.__version__}")
print(f"Author: {bis512.__author__}")

# Get help
help(bis512)

✅ Quick Test

from bis512 import hash

# Test if working correctly
test_hash = hash("test")
print(f"Hash length: {len(test_hash)} characters")
print(f"Is 128 chars? {len(test_hash) == 128}")
print(f"First 16 chars: {test_hash[:16]}...")

📦 Uninstall

pip uninstall bis512

That's it! Your hash function is ready to use! 🚀

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

bis512-1.0.0.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

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

bis512-1.0.0-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file bis512-1.0.0.tar.gz.

File metadata

  • Download URL: bis512-1.0.0.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for bis512-1.0.0.tar.gz
Algorithm Hash digest
SHA256 77880e76fb6d280c0a658c06b257423361b1e5cfd09973094d1e3e1cc19a0f40
MD5 5d88431df768093d1a7c3c9306cd5390
BLAKE2b-256 5556f83fb9a325ecb819bea2155e9e4e0225d34e305de0619b983b0208bdafc8

See more details on using hashes here.

File details

Details for the file bis512-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: bis512-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for bis512-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8400cdb206bf7e33cfd5b9c85c83445aaf97f702e64811491665dc33940430dc
MD5 5e775e9c49fe025257769b0b24524f7f
BLAKE2b-256 37fc2160d56adff0c36c0a9593bee32219746c6fa057b8946203eb78dc321565

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