• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
        • Crypto-hdwallet
        • Apt
        • Error-checking
        • Fty-extensions
        • Isar
        • Kestrel-utilities
        • Set
        • C
        • Soft
        • Bv
        • Imp-language
        • Ethereum
        • Event-macros
        • Java
        • Riscv
        • Bitcoin
          • Bip32
            • Bip32-wallet-structure
              • Bip32-compliant-addresses-for-limit-p
              • Bip32-compliant-accounts-for-limit-p
              • Bip32-compliant-chains-p
              • Bip32-compliant-addresses-p
              • Bip32-compliant-tree-p
                • Bip32-compliant-depth-p
                • Bip32-compliant-accounts-p
              • Bip32-key-trees
              • Bip32-key-serialization
              • Bip32-key-derivation
              • Bip32-executable-attachments
              • Bip32-extended-keys
              • Bip32-master-key-generation
            • Bech32
            • Bip39
            • Bip44
            • Base58
            • Bip43
            • Bytes
            • Base58check
            • Cryptography
            • Bip-350
            • Bip-173
          • Zcash
          • Yul
          • ACL2-programming-language
          • Prime-fields
          • Json
          • Syntheto
          • File-io-light
          • Cryptography
          • Number-theory
          • Axe
          • Lists-light
          • Builtins
          • Solidity
          • Helpers
          • Htclient
          • Typed-lists-light
          • Arithmetic-light
        • X86isa
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Bip32-wallet-structure

    Bip32-compliant-tree-p

    Check if a key tree complies with the BIP 32 wallet structure.

    Signature
    (bip32-compliant-tree-p tree) → yes/no
    Arguments
    tree — Guard (bip32-key-treep tree).
    Returns
    yes/no — Type (booleanp yes/no).

    Besides requiring the account keys to comply (which includes the compliance of the chain and address keys), we also require the tree to be rooted at the master private key. That is, we exclude subtrees of the master tree used for partial sharing.

    We also require the tree to have depth below 4.

    Definitions and Theorems

    Function: bip32-compliant-tree-p

    (defun bip32-compliant-tree-p (tree)
      (declare (xargs :guard (bip32-key-treep tree)))
      (and (bip32-compliant-accounts-p tree)
           (equal 0 (bip32-key-tree->root-depth tree))
           (bip32-key-tree-priv-p tree)
           (bip32-compliant-depth-p tree)))

    Theorem: booleanp-of-bip32-compliant-tree-p

    (defthm booleanp-of-bip32-compliant-tree-p
      (b* ((yes/no (bip32-compliant-tree-p tree)))
        (booleanp yes/no))
      :rule-classes :rewrite)

    Theorem: bip32-compliant-tree-p-of-bip32-key-tree-fix-tree

    (defthm bip32-compliant-tree-p-of-bip32-key-tree-fix-tree
      (equal (bip32-compliant-tree-p (bip32-key-tree-fix tree))
             (bip32-compliant-tree-p tree)))

    Theorem: bip32-compliant-tree-p-bip32-key-tree-equiv-congruence-on-tree

    (defthm
         bip32-compliant-tree-p-bip32-key-tree-equiv-congruence-on-tree
      (implies (bip32-key-tree-equiv tree tree-equiv)
               (equal (bip32-compliant-tree-p tree)
                      (bip32-compliant-tree-p tree-equiv)))
      :rule-classes :congruence)