Urbit Developers
  • Hoon

    • Overview
    • Cheat Sheet
    • Irregular forms
    • Hoon Errors
    • Hoon Style Guide
    • Basic Types
    • Advanced Types
    • Auras
    • Runes

      • Atoms and strings
      • Nock . ('dot')
      • Wild ! ('zap')
      • Change Subject = ('tis')
      • Conditionals ? ('wut')
      • Cores | ('bar')
      • Arms + ('lus')
      • Cells : ('col')
      • Calls % ('cen')
      • Casts ^ ('ket')
      • Structures $ ('buc')
      • Make ; ('mic')
      • Hints ~ ('sig')
      • Imports / ('fas')
      • Terminators -- and ==
      • Limbs and wings

        • Limbs
        • Wings
        • Standard library

          • Table of Contents
          • 1a: Basic Arithmetic
          • 1b: Tree Addressing
          • 1c: Molds and Mold-Builders
          • 2a: Unit Logic
          • 2b: List Logic
          • 2c: Bit Arithmetic
          • 2d: Bit Logic
          • 2e: Insecure Hashing
          • 2f: Noun Ordering
          • 2g: Unsigned Powers
          • 2h: Set Logic
          • 2i: Map Logic
          • 2j: Jar and Jug Logic
          • 2k: Queue Logic
          • 2l: Container from Container
          • 2m: Container from Noun
          • 2n: Functional Hacks
          • 2o: Normalizing Containers
          • 2p: Serialization
          • 2q: Molds and Mold-Builders
          • 3a: Modular and Signed Ints
          • 3b: Floating Point
          • 3c: Urbit Time
          • 3d: SHA Hash Family
          • 3e: AES encryption (Removed)
          • 3f: Scrambling
          • 3g: Molds and Mold-Builders
          • 4a: Exotic Bases
          • 4b: Text Processing
          • 4c: Tank Printer
          • 4d: Parsing (Tracing)
          • 4e: Parsing (Combinators)
          • 4f: Parsing (Rule-Builders)
          • 4g: Parsing (Outside Caller)
          • 4h: Parsing (ASCII Glyphs)
          • 4i: Parsing (Useful Idioms)
          • 4j: Parsing (Bases and Base Digits)
          • 4k: Atom Printing
          • 4l: Atom Parsing
          • 4m: Formatting Functions
          • 4n: Virtualization
          • 4o: Molds
          • 5a: Compiler Utilities
          • 5b: Macro Expansion
          • 5c: Compiler Backend & Prettyprinter
          • 5d: Parser
          • 5e: Molds and mold builders
          • 5f: Profiling support
          • Zuse

            • Table of Contents
            • 2d(1-5): To JSON, Wains
            • 2d(6): From JSON
            • 2d(7): From JSON (unit)
            • 2e(2-3): Print & Parse JSON
          • Arvo

            • Overview
            • Ames

              • Overview
              • Cryptography
              • API Reference
              • Scry Reference
              • Data Types
              • Behn

                • Overview
                • API Reference
                • Scry Reference
                • Examples
                • Clay

                  • Overview
                  • Architecture
                  • Using Clay
                  • Data Types
                  • Scry Reference
                  • API Reference
                  • Examples
                  • Marks

                    • Overview
                    • Writing Marks
                    • Using Marks
                    • Examples
                  • Dill

                    • Overview
                    • API Reference
                    • Scry Reference
                    • Data Types
                    • Eyre

                      • Overview
                      • External API Reference
                      • Internal API Reference
                      • Scry Reference
                      • Data Types
                      • Guide
                      • Gall

                        • Overview
                        • API Reference
                        • Data Types
                        • Threads Reference
                        • Iris

                          • Overview
                          • API Reference
                          • Data Types
                          • Example
                          • Jael

                            • Overview
                            • API Reference
                            • Scry Reference
                            • Data Types
                            • Examples
                            • Threads

                              • Overview
                              • HTTP API
                              • Basics

                                • Fundamentals
                                • Bind
                                • Input
                                • Output
                                • Summary
                                • Gall

                                  • Start Thread
                                  • Take Result
                                  • Take Facts
                                  • Stop Thread
                                  • Poke Thread
                                  • Examples

                                    • Fetch JSON
                                    • Child Thread
                                    • Main-loop
                                    • Poke Agent
                                    • Scry
                                    • Take Fact
                                  • Concepts

                                    • Scries
                                    • Subscriptions
                                    • Tutorials

                                      • Move Trace
                                      • Reference

                                        • Cryptography
                                        • Filesystem Hierarchy
                                      • Nock

                                        • Nock Definition
                                        • Explanation
                                        • Example
                                        • Implementations
                                        • Vere

                                          • C Runtime System
                                          • Land of Nouns
                                          • API overview by prefix
                                          • C in Urbit
                                          • Writing Jets
                                          • Cryptography
                                          • Azimuth

                                            • Overview
                                            • Urbit HD Wallet
                                            • Azimuth Data Flow
                                            • Azimuth.eth
                                            • Ecliptic.eth
                                            • Advanced Azimuth Tools
                                            • Life and Rift
                                            • Layer 2

                                              • Layer 2 Overview
                                              • Layer 2 Actions
                                              • Transaction Format
                                              • Rollers
                                              • Roller HTTP RPC-API
                                              • Custom Roller Tutorial
                                            • Glossary

                                              • Ames
                                              • Aqua
                                              • Arm
                                              • Arvo
                                              • Atom
                                              • Azimuth
                                              • Battery
                                              • Behn
                                              • Bridge
                                              • Censures
                                              • chat
                                              • Claims
                                              • Clay
                                              • Comet
                                              • Core
                                              • Delegated Sending
                                              • Desk
                                              • Dill
                                              • Document Proposal
                                              • Dojo
                                              • Door
                                              • Ecliptic
                                              • Event Log
                                              • Eyre
                                              • Galaxy
                                              • Gall
                                              • Gate
                                              • HD Wallet
                                              • Hoon
                                              • Invite Tree
                                              • Iris
                                              • Jael
                                              • Keyfile
                                              • Khan
                                              • Landscape
                                              • Mark
                                              • Moon
                                              • Nock
                                              • Noun
                                              • OTA Updates
                                              • Payload
                                              • pH
                                              • Pier
                                              • Pill
                                              • Planet
                                              • Proxies
                                              • Replay
                                              • Factory Reset
                                              • Naive rollups
                                              • Sail/Udon
                                              • Senate
                                              • Ship
                                              • ship.arvo.network
                                              • Star
                                              • |sync
                                              • Trap
                                              • Upgrade Proposal
                                              • Vane
                                              • Vere
                                              • Voting
                                              • Wallet-Generator
                                              • Additional

                                                • Cryptography
                                                • Software Distribution

                                                  • Overview
                                                  • Docket File
                                                  • Glob
                                                Urbit
                                                • Hoon

                                                  • Overview
                                                  • Cheat Sheet
                                                  • Irregular forms
                                                  • Hoon Errors
                                                  • Hoon Style Guide
                                                  • Basic Types
                                                  • Advanced Types
                                                  • Auras
                                                  • Runes

                                                    • Atoms and strings
                                                    • Nock . ('dot')
                                                    • Wild ! ('zap')
                                                    • Change Subject = ('tis')
                                                    • Conditionals ? ('wut')
                                                    • Cores | ('bar')
                                                    • Arms + ('lus')
                                                    • Cells : ('col')
                                                    • Calls % ('cen')
                                                    • Casts ^ ('ket')
                                                    • Structures $ ('buc')
                                                    • Make ; ('mic')
                                                    • Hints ~ ('sig')
                                                    • Imports / ('fas')
                                                    • Terminators -- and ==
                                                    • Limbs and wings

                                                      • Limbs
                                                      • Wings
                                                      • Standard library

                                                        • Table of Contents
                                                        • 1a: Basic Arithmetic
                                                        • 1b: Tree Addressing
                                                        • 1c: Molds and Mold-Builders
                                                        • 2a: Unit Logic
                                                        • 2b: List Logic
                                                        • 2c: Bit Arithmetic
                                                        • 2d: Bit Logic
                                                        • 2e: Insecure Hashing
                                                        • 2f: Noun Ordering
                                                        • 2g: Unsigned Powers
                                                        • 2h: Set Logic
                                                        • 2i: Map Logic
                                                        • 2j: Jar and Jug Logic
                                                        • 2k: Queue Logic
                                                        • 2l: Container from Container
                                                        • 2m: Container from Noun
                                                        • 2n: Functional Hacks
                                                        • 2o: Normalizing Containers
                                                        • 2p: Serialization
                                                        • 2q: Molds and Mold-Builders
                                                        • 3a: Modular and Signed Ints
                                                        • 3b: Floating Point
                                                        • 3c: Urbit Time
                                                        • 3d: SHA Hash Family
                                                        • 3e: AES encryption (Removed)
                                                        • 3f: Scrambling
                                                        • 3g: Molds and Mold-Builders
                                                        • 4a: Exotic Bases
                                                        • 4b: Text Processing
                                                        • 4c: Tank Printer
                                                        • 4d: Parsing (Tracing)
                                                        • 4e: Parsing (Combinators)
                                                        • 4f: Parsing (Rule-Builders)
                                                        • 4g: Parsing (Outside Caller)
                                                        • 4h: Parsing (ASCII Glyphs)
                                                        • 4i: Parsing (Useful Idioms)
                                                        • 4j: Parsing (Bases and Base Digits)
                                                        • 4k: Atom Printing
                                                        • 4l: Atom Parsing
                                                        • 4m: Formatting Functions
                                                        • 4n: Virtualization
                                                        • 4o: Molds
                                                        • 5a: Compiler Utilities
                                                        • 5b: Macro Expansion
                                                        • 5c: Compiler Backend & Prettyprinter
                                                        • 5d: Parser
                                                        • 5e: Molds and mold builders
                                                        • 5f: Profiling support
                                                        • Zuse

                                                          • Table of Contents
                                                          • 2d(1-5): To JSON, Wains
                                                          • 2d(6): From JSON
                                                          • 2d(7): From JSON (unit)
                                                          • 2e(2-3): Print & Parse JSON
                                                        • Arvo

                                                          • Overview
                                                          • Ames

                                                            • Overview
                                                            • Cryptography
                                                            • API Reference
                                                            • Scry Reference
                                                            • Data Types
                                                            • Behn

                                                              • Overview
                                                              • API Reference
                                                              • Scry Reference
                                                              • Examples
                                                              • Clay

                                                                • Overview
                                                                • Architecture
                                                                • Using Clay
                                                                • Data Types
                                                                • Scry Reference
                                                                • API Reference
                                                                • Examples
                                                                • Marks

                                                                  • Overview
                                                                  • Writing Marks
                                                                  • Using Marks
                                                                  • Examples
                                                                • Dill

                                                                  • Overview
                                                                  • API Reference
                                                                  • Scry Reference
                                                                  • Data Types
                                                                  • Eyre

                                                                    • Overview
                                                                    • External API Reference
                                                                    • Internal API Reference
                                                                    • Scry Reference
                                                                    • Data Types
                                                                    • Guide
                                                                    • Gall

                                                                      • Overview
                                                                      • API Reference
                                                                      • Data Types
                                                                      • Threads Reference
                                                                      • Iris

                                                                        • Overview
                                                                        • API Reference
                                                                        • Data Types
                                                                        • Example
                                                                        • Jael

                                                                          • Overview
                                                                          • API Reference
                                                                          • Scry Reference
                                                                          • Data Types
                                                                          • Examples
                                                                          • Threads

                                                                            • Overview
                                                                            • HTTP API
                                                                            • Basics

                                                                              • Fundamentals
                                                                              • Bind
                                                                              • Input
                                                                              • Output
                                                                              • Summary
                                                                              • Gall

                                                                                • Start Thread
                                                                                • Take Result
                                                                                • Take Facts
                                                                                • Stop Thread
                                                                                • Poke Thread
                                                                                • Examples

                                                                                  • Fetch JSON
                                                                                  • Child Thread
                                                                                  • Main-loop
                                                                                  • Poke Agent
                                                                                  • Scry
                                                                                  • Take Fact
                                                                                • Concepts

                                                                                  • Scries
                                                                                  • Subscriptions
                                                                                  • Tutorials

                                                                                    • Move Trace
                                                                                    • Reference

                                                                                      • Cryptography
                                                                                      • Filesystem Hierarchy
                                                                                    • Nock

                                                                                      • Nock Definition
                                                                                      • Explanation
                                                                                      • Example
                                                                                      • Implementations
                                                                                      • Vere

                                                                                        • C Runtime System
                                                                                        • Land of Nouns
                                                                                        • API overview by prefix
                                                                                        • C in Urbit
                                                                                        • Writing Jets
                                                                                        • Cryptography
                                                                                        • Azimuth

                                                                                          • Overview
                                                                                          • Urbit HD Wallet
                                                                                          • Azimuth Data Flow
                                                                                          • Azimuth.eth
                                                                                          • Ecliptic.eth
                                                                                          • Advanced Azimuth Tools
                                                                                          • Life and Rift
                                                                                          • Layer 2

                                                                                            • Layer 2 Overview
                                                                                            • Layer 2 Actions
                                                                                            • Transaction Format
                                                                                            • Rollers
                                                                                            • Roller HTTP RPC-API
                                                                                            • Custom Roller Tutorial
                                                                                          • Glossary

                                                                                            • Ames
                                                                                            • Aqua
                                                                                            • Arm
                                                                                            • Arvo
                                                                                            • Atom
                                                                                            • Azimuth
                                                                                            • Battery
                                                                                            • Behn
                                                                                            • Bridge
                                                                                            • Censures
                                                                                            • chat
                                                                                            • Claims
                                                                                            • Clay
                                                                                            • Comet
                                                                                            • Core
                                                                                            • Delegated Sending
                                                                                            • Desk
                                                                                            • Dill
                                                                                            • Document Proposal
                                                                                            • Dojo
                                                                                            • Door
                                                                                            • Ecliptic
                                                                                            • Event Log
                                                                                            • Eyre
                                                                                            • Galaxy
                                                                                            • Gall
                                                                                            • Gate
                                                                                            • HD Wallet
                                                                                            • Hoon
                                                                                            • Invite Tree
                                                                                            • Iris
                                                                                            • Jael
                                                                                            • Keyfile
                                                                                            • Khan
                                                                                            • Landscape
                                                                                            • Mark
                                                                                            • Moon
                                                                                            • Nock
                                                                                            • Noun
                                                                                            • OTA Updates
                                                                                            • Payload
                                                                                            • pH
                                                                                            • Pier
                                                                                            • Pill
                                                                                            • Planet
                                                                                            • Proxies
                                                                                            • Replay
                                                                                            • Factory Reset
                                                                                            • Naive rollups
                                                                                            • Sail/Udon
                                                                                            • Senate
                                                                                            • Ship
                                                                                            • ship.arvo.network
                                                                                            • Star
                                                                                            • |sync
                                                                                            • Trap
                                                                                            • Upgrade Proposal
                                                                                            • Vane
                                                                                            • Vere
                                                                                            • Voting
                                                                                            • Wallet-Generator
                                                                                            • Additional

                                                                                              • Cryptography
                                                                                              • Software Distribution

                                                                                                • Overview
                                                                                                • Docket File
                                                                                                • Glob
                                                                                              Reference/Hoon/Standard library

                                                                                              2e: Insecure Hashing

                                                                                              ++mug

                                                                                              murmur3 scrambler

                                                                                              Hashes a with the 31-bit murmur3 non-cryptographic hash algorithm, producing an atom.

                                                                                              Accepts

                                                                                              a is a noun.

                                                                                              Produces

                                                                                              An atom.

                                                                                              Source

                                                                                              ++ mug
                                                                                              ~/ %mug
                                                                                              |= a=*
                                                                                              |^ ?@ a (mum 0xcafe.babe 0x7fff a)
                                                                                              =/ b (cat 5 $(a -.a) $(a +.a))
                                                                                              (mum 0xdead.beef 0xfffe b)
                                                                                              ::
                                                                                              ++ mum
                                                                                              |= [syd=@uxF fal=@F key=@]
                                                                                              =/ wyd (met 3 key)
                                                                                              =| i=@ud
                                                                                              |- ^- @F
                                                                                              ?: =(8 i) fal
                                                                                              =/ haz=@F (muk syd wyd key)
                                                                                              =/ ham=@F (mix (rsh [0 31] haz) (end [0 31] haz))
                                                                                              ?.(=(0 ham) ham $(i +(i), syd +(syd)))
                                                                                              --

                                                                                              Examples

                                                                                              > (mug 10.000)
                                                                                              795.713.195
                                                                                              > (mug 10.001)
                                                                                              420.521.697
                                                                                              > (mug 1)
                                                                                              1.901.865.568
                                                                                              > (mug (some 10))
                                                                                              750.200.080
                                                                                              > (mug [1 2 3 4 5 ~])
                                                                                              1.565.443.491

                                                                                              ++muk

                                                                                              Standard MurmurHash3

                                                                                              Implementation of the 32-bit MurmurHash3 non-cryptographic hash algorithm. Takes syd as the seed, len as the key length in blocks of size 3, and key as the key, producing an atom.

                                                                                              Accepts

                                                                                              syd is an atom.

                                                                                              len is an atom.

                                                                                              key is an atom.

                                                                                              Produces

                                                                                              An atom.

                                                                                              Source

                                                                                              ++ muk :: standard murmur3
                                                                                              ~% %muk ..muk ~
                                                                                              =+ ~(. fe 5)
                                                                                              |= [syd=@ len=@ key=@]
                                                                                              =. syd (end 5 syd)
                                                                                              =/ pad (sub len (met 3 key))
                                                                                              =/ data (weld (rip 3 key) (reap pad 0))
                                                                                              =/ nblocks (div len 4) :: intentionally off-by-one
                                                                                              =/ h1 syd
                                                                                              =+ [c1=0xcc9e.2d51 c2=0x1b87.3593]
                                                                                              =/ blocks (rip 5 key)
                                                                                              =/ i nblocks
                                                                                              =. h1 =/ hi h1 |-
                                                                                              ?: =(0 i) hi
                                                                                              =/ k1 (snag (sub nblocks i) blocks) :: negative array index
                                                                                              =. k1 (sit (mul k1 c1))
                                                                                              =. k1 (rol 0 15 k1)
                                                                                              =. k1 (sit (mul k1 c2))
                                                                                              =. hi (mix hi k1)
                                                                                              =. hi (rol 0 13 hi)
                                                                                              =. hi (sum (sit (mul hi 5)) 0xe654.6b64)
                                                                                              $(i (dec i))
                                                                                              =/ tail (slag (mul 4 nblocks) data)
                                                                                              =/ k1 0
                                                                                              =/ tlen (dis len 3)
                                                                                              =. h1
                                                                                              ?+ tlen h1 :: fallthrough switch
                                                                                              %3 =. k1 (mix k1 (lsh [0 16] (snag 2 tail)))
                                                                                              =. k1 (mix k1 (lsh [0 8] (snag 1 tail)))
                                                                                              =. k1 (mix k1 (snag 0 tail))
                                                                                              =. k1 (sit (mul k1 c1))
                                                                                              =. k1 (rol 0 15 k1)
                                                                                              =. k1 (sit (mul k1 c2))
                                                                                              (mix h1 k1)
                                                                                              %2 =. k1 (mix k1 (lsh [0 8] (snag 1 tail)))
                                                                                              =. k1 (mix k1 (snag 0 tail))
                                                                                              =. k1 (sit (mul k1 c1))
                                                                                              =. k1 (rol 0 15 k1)
                                                                                              =. k1 (sit (mul k1 c2))
                                                                                              (mix h1 k1)
                                                                                              %1 =. k1 (mix k1 (snag 0 tail))
                                                                                              =. k1 (sit (mul k1 c1))
                                                                                              =. k1 (rol 0 15 k1)
                                                                                              =. k1 (sit (mul k1 c2))
                                                                                              (mix h1 k1)
                                                                                              ==
                                                                                              =. h1 (mix h1 len)
                                                                                              |^ (fmix32 h1)
                                                                                              ++ fmix32
                                                                                              |= h=@
                                                                                              =. h (mix h (rsh [0 16] h))
                                                                                              =. h (sit (mul h 0x85eb.ca6b))
                                                                                              =. h (mix h (rsh [0 13] h))
                                                                                              =. h (sit (mul h 0xc2b2.ae35))
                                                                                              =. h (mix h (rsh [0 16] h))
                                                                                              h
                                                                                              --

                                                                                              Examples

                                                                                              > (muk 6 1 3)
                                                                                              3.427.677.118
                                                                                              > (muk 6 2 'jerry')
                                                                                              ! exit
                                                                                              > (muk 6 2 'je')
                                                                                              3.602.081.716
                                                                                              > (met 3 'jerry')
                                                                                              5
                                                                                              > (met 3 'je')
                                                                                              2
                                                                                              > (muk 6 5 'jerry')
                                                                                              1.276.447.489
                                                                                              > (muk 6 15 'jerry')
                                                                                              2.881.503.571
                                                                                              > =e (cut 3 [0 2] eny) :: `eny` is 512 bits of entropy (a random number).
                                                                                              > e
                                                                                              44.228
                                                                                              > (muk e 11 10.000)
                                                                                              246.077.549

                                                                                              <-

                                                                                              2d: Bit Logic

                                                                                              2f: Noun Ordering

                                                                                              ->

                                                                                              Edit this page on GitHub