Args: frequency (int): Frequency of the sound key (Hz) duration (int): Duration of the sound key (seconds) sample_rate (int): Sample rate of the sound key (Hz)
# Challenge-Response Mechanism def challenge_response(sound_key, challenge_code): """ Challenge-response mechanism to verify the sound key.
# Compute the challenge code challenge_code = hashlib.sha256(recorded_sound).hexdigest() ample sound keygen challenge code install
import numpy as np import pyaudio import wave import hashlib
Returns: sound_key (numpy.ndarray): Generated sound key """ t = np.linspace(0, duration, int(sample_rate * duration), False) sound_key = np.sin(frequency * t * 2 * np.pi) return sound_key Args: frequency (int): Frequency of the sound key
Returns: recorded_sound (numpy.ndarray): Recorded sound """ p = pyaudio.PyAudio() stream = p.open(format=pyaudio.paFloat32, channels=1, rate=sample_rate, input=True) recorded_sound = np.frombuffer(stream.read(int(sample_rate * duration)), dtype=np.float32) stream.stop_stream() stream.close() p.terminate() return recorded_sound
# Compare the hash with the challenge code return sound_key_hash == challenge_code int(sample_rate * duration)
Args: sound_key (numpy.ndarray): Sound key to play sample_rate (int): Sample rate of the sound key (Hz) """ p = pyaudio.PyAudio() stream = p.open(format=pyaudio.paFloat32, channels=1, rate=sample_rate, output=True) stream.write(sound_key.astype(np.float32).tobytes()) stream.stop_stream() stream.close() p.terminate()