code: def from_bytes(b):
          
          if len(b) < 78:
              raise ValueError("b must be at least 78 bytes long.")
  
          version = int.from_bytes(b[:4], 'big')
          depth = b[4]
          parent_fingerprint = b[5:9]
          index = int.from_bytes(b[9:13], 'big')
          chain_code = b[13:45]
          key_bytes = b[45:78]
  
          rv = None
          if version == HDPrivateKey.MAINNET_VERSION or version == HDPrivateKey.TESTNET_VERSION:
              if key_bytes[0] != 0:
                  raise ValueError("First byte of private key must be 0x00!")
  
              private_key = int.from_bytes(key_bytes[1:], 'big')
              rv = HDPrivateKey(key=private_key,
                                chain_code=chain_code,
                                index=index,
                                depth=depth,
                                parent_fingerprint=parent_fingerprint)
          elif version == HDPublicKey.MAINNET_VERSION or version == HDPublicKey.TESTNET_VERSION:
              if key_bytes[0] != 0x02 and key_bytes[0] != 0x03:
                  raise ValueError("First byte of public key must be 0x02 or 0x03!")
  
              public_key = PublicKey.from_bytes(key_bytes)
              rv = HDPublicKey(x=public_key.point.x,
                               y=public_key.point.y,
                               chain_code=chain_code,
                               index=index,
                               depth=depth,
                               parent_fingerprint=parent_fingerprint)
          else:
              raise ValueError("incorrect encoding.")
  
          return rv
docs: Generates either a HDPrivateKey or HDPublicKey from the underlying
          bytes.
  
          The serialization must conform to the description in:
          https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#serialization-format
  
          Args:
              b (bytes): A byte stream conforming to the above.
  
          Returns:
              HDPrivateKey or HDPublicKey:
                  Either an HD private or
                  public key object, depending on what was serialized.