# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import click from bumble.colors import color from bumble.hci import Address from bumble.helpers import generate_irk, verify_rpa_with_irk @click.group() def cli(): ''' This is a tool for generating IRK, RPA, and verifying IRK/RPA pairs ''' @click.command() def gen_irk() -> None: print(generate_irk().hex()) @click.command() @click.argument("irk", type=str) def gen_rpa(irk: str) -> None: irk_bytes = bytes.fromhex(irk) rpa = Address.generate_private_address(irk_bytes) print(rpa.to_string(with_type_qualifier=False)) @click.command() @click.argument("irk", type=str) @click.argument("rpa", type=str) def verify_rpa(irk: str, rpa: str) -> None: address = Address(rpa) irk_bytes = bytes.fromhex(irk) if verify_rpa_with_irk(address, irk_bytes): print(color("Verified", "green")) else: print(color("Not Verified", "red")) def main(): cli.add_command(gen_irk) cli.add_command(gen_rpa) cli.add_command(verify_rpa) cli() # ----------------------------------------------------------------------------- if __name__ == '__main__': main()