summaryrefslogtreecommitdiffstats
path: root/security/crypto.py
diff options
context:
space:
mode:
Diffstat (limited to 'security/crypto.py')
-rw-r--r--security/crypto.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/security/crypto.py b/security/crypto.py
new file mode 100644
index 0000000..f961a21
--- /dev/null
+++ b/security/crypto.py
@@ -0,0 +1,37 @@
+from pyspx.shake_256f import generate_keypair, sign, verify
+import hashlib
+from typing import Tuple, Optional
+import os
+
+class CryptoManager:
+ def __init__(self):
+ self.signing_key: Optional[bytes] = None
+ self.verify_key: Optional[bytes] = None
+
+ def generate_keys(self) -> Tuple[bytes, bytes]:
+ """Generate new signing keypair"""
+ self.signing_key, self.verify_key = generate_keypair()
+ return self.signing_key, self.verify_key
+
+ def sign_message(self, message: bytes) -> bytes:
+ """Sign a message using the signing key"""
+ if not self.signing_key:
+ raise ValueError("No signing key available")
+ return sign(message, self.signing_key)
+
+ def verify_signature(self, message: bytes, signature: bytes,
+ public_key: bytes) -> bool:
+ """Verify a message signature"""
+ try:
+ verify(message, signature, public_key)
+ return True
+ except:
+ return False
+
+ def hash_data(self, data: bytes) -> str:
+ """Create SHA-256 hash of data"""
+ return hashlib.sha256(data).hexdigest()
+
+ def generate_nonce(self) -> bytes:
+ """Generate a random nonce"""
+ return os.urandom(32)