-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbob.py
More file actions
37 lines (26 loc) · 1.24 KB
/
bob.py
File metadata and controls
37 lines (26 loc) · 1.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy as np
from braket.devices import LocalSimulator
from utils.bb84 import initialize_protocol, encode_qubits, measure_qubits, filter_qubits
NUMBER_OF_QUBITS = 12
# Load Alice data
alice_states = np.load("channel/alice_states.npy")
encoding_basis = np.load("channel/encoding_basis.npy")
# Bob chooses random measurement bases
_, _, measurement_basis = initialize_protocol(NUMBER_OF_QUBITS)
# Bob reconstructs Alice's circuit
circuit = encode_qubits(NUMBER_OF_QUBITS, alice_states, encoding_basis)
# Bob applies his basis
circuit = measure_qubits(circuit, measurement_basis)
# IMPORTANT: measure all qubits
circuit.measure(list(range(NUMBER_OF_QUBITS)))
# Run simulation
device = LocalSimulator("default")
result = device.run(circuit, shots=1).result()
measured_bits = np.array(result.measurements[0]).astype(int)
# Basis reconciliation (sifting)
alice_sifted = filter_qubits(alice_states, encoding_basis, measurement_basis)
bob_sifted = filter_qubits(measured_bits, encoding_basis, measurement_basis)
print("Bob measurement basis:", measurement_basis.astype(int))
print("Alice sifted key: ", alice_sifted)
print("Bob sifted key: ", bob_sifted)
print("Matches: ", int(np.sum(alice_sifted == bob_sifted)), "/", len(alice_sifted))