english_key 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Readme.md ADDED
@@ -0,0 +1,11 @@
1
+ # EnglishKey ([RFC1751](http://tools.ietf.org/html/rfc1751))
2
+
3
+ >> EnglishKey.uuid
4
+ => "ROTH_EST_ARK_ELLA_IRE_LESS_JUG_ALOE_SITU_PAD_SALK_HUED"
5
+ >> EnglishKey.uuid
6
+ => "JOVE_HAW_MEND_LUST_DRUG_TANK_FOLK_RUSE_BOON_CHIN_RUNG_AVIS"
7
+
8
+ >> EnglishKey.decode "YOU CAN BUY WILL A BEER"
9
+ => 5134468780530860203
10
+ >> EnglishKey.encode 5134468780530860203
11
+ => "YOU CAN BUY WILL A BEER"
@@ -0,0 +1,19 @@
1
+ require 'securerandom'
2
+ require_relative 'english_key/rfc1751'
3
+
4
+ module EnglishKey
5
+ VERSION = '0.1.0'
6
+
7
+ extend self
8
+ def uuid
9
+ encode(SecureRandom.random_number(2**128 - 1)).tr(' ', '_')
10
+ end
11
+
12
+ def encode(num)
13
+ RFC1751.encode num
14
+ end
15
+
16
+ def decode(str)
17
+ RFC1751.decode str
18
+ end
19
+ end
@@ -0,0 +1,56 @@
1
+ require_relative 'rfc1751_words'
2
+ module EnglishKey
3
+ module RFC1751
4
+ extend self
5
+
6
+ ChecksumError = Class.new(ArgumentError)
7
+
8
+ def encode(num)
9
+ split_64bit(num).map {|part| encode_64bit part }.join ' '
10
+ end
11
+
12
+ def decode(words)
13
+ base_array_to_int( decode_phrases(words).flatten, 2**64)
14
+ end
15
+
16
+ private
17
+
18
+ def split_64bit(num)
19
+ parts = []
20
+ while num > 0
21
+ parts.unshift num % 2**64
22
+ num /= 2**64
23
+ end
24
+ parts
25
+ end
26
+
27
+ def encode_64bit(num)
28
+ bits = 63.downto(0).map{|i| num[i] }
29
+
30
+ keys = bits.each_slice(11).map {|bit_array| base_array_to_int(bit_array, 2) }
31
+
32
+ keys[5] = (keys[5] << 2) + checksum(num)
33
+
34
+ keys.map {|idx| WORDS[idx] }
35
+ end
36
+
37
+ def checksum(num)
38
+ (0..63).step(2).inject(0) { |sum,j| sum + 2*num[j+1] + num[j] } & 3
39
+ end
40
+
41
+ def decode_phrases(words)
42
+ words.split(/ /).each_slice(6).map { |phrase| decode_phrase phrase }
43
+ end
44
+
45
+ def decode_phrase(phrase)
46
+ nums = phrase.map{|word| WORDS.index word}
47
+ decoded = nums.inject(0) { |sum, n| (sum << 11) + n } >> 2
48
+ raise ChecksumError unless (nums.last & 3) == checksum(decoded)
49
+ decoded
50
+ end
51
+
52
+ def base_array_to_int(arry, base)
53
+ arry.reverse.each.with_index.inject(0) {|sum, (n,pwr)| sum + n * base**pwr }
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,143 @@
1
+ module EnglishKey
2
+ module RFC1751
3
+ WORDS = %w[
4
+ A ABE ACE ACT AD ADA ADD AGO AID AIM AIR ALL ALP AM AMY AN ANA AND ANN
5
+ ANT ANY APE APS APT ARC ARE ARK ARM ART AS ASH ASK AT ATE AUG AUK AVE
6
+ AWE AWK AWL AWN AX AYE BAD BAG BAH BAM BAN BAR BAT BAY BE BED BEE BEG
7
+ BEN BET BEY BIB BID BIG BIN BIT BOB BOG BON BOO BOP BOW BOY BUB BUD BUG
8
+ BUM BUN BUS BUT BUY BY BYE CAB CAL CAM CAN CAP CAR CAT CAW COD COG COL
9
+ CON COO COP COT COW COY CRY CUB CUE CUP CUR CUT DAB DAD DAM DAN DAR DAY
10
+ DEE DEL DEN DES DEW DID DIE DIG DIN DIP DO DOE DOG DON DOT DOW DRY DUB
11
+ DUD DUE DUG DUN EAR EAT ED EEL EGG EGO ELI ELK ELM ELY EM END EST ETC
12
+ EVA EVE EWE EYE FAD FAN FAR FAT FAY FED FEE FEW FIB FIG FIN FIR FIT FLO
13
+ FLY FOE FOG FOR FRY FUM FUN FUR GAB GAD GAG GAL GAM GAP GAS GAY GEE GEL
14
+ GEM GET GIG GIL GIN GO GOT GUM GUN GUS GUT GUY GYM GYP HA HAD HAL HAM
15
+ HAN HAP HAS HAT HAW HAY HE HEM HEN HER HEW HEY HI HID HIM HIP HIS HIT HO
16
+ HOB HOC HOE HOG HOP HOT HOW HUB HUE HUG HUH HUM HUT I ICY IDA IF IKE ILL
17
+ INK INN IO ION IQ IRA IRE IRK IS IT ITS IVY JAB JAG JAM JAN JAR JAW JAY
18
+ JET JIG JIM JO JOB JOE JOG JOT JOY JUG JUT KAY KEG KEN KEY KID KIM KIN
19
+ KIT LA LAB LAC LAD LAG LAM LAP LAW LAY LEA LED LEE LEG LEN LEO LET LEW
20
+ LID LIE LIN LIP LIT LO LOB LOG LOP LOS LOT LOU LOW LOY LUG LYE MA MAC
21
+ MAD MAE MAN MAO MAP MAT MAW MAY ME MEG MEL MEN MET MEW MID MIN MIT MOB
22
+ MOD MOE MOO MOP MOS MOT MOW MUD MUG MUM MY NAB NAG NAN NAP NAT NAY NE
23
+ NED NEE NET NEW NIB NIL NIP NIT NO NOB NOD NON NOR NOT NOV NOW NU NUN
24
+ NUT O OAF OAK OAR OAT ODD ODE OF OFF OFT OH OIL OK OLD ON ONE OR ORB ORE
25
+ ORR OS OTT OUR OUT OVA OW OWE OWL OWN OX PA PAD PAL PAM PAN PAP PAR PAT
26
+ PAW PAY PEA PEG PEN PEP PER PET PEW PHI PI PIE PIN PIT PLY PO POD POE
27
+ POP POT POW PRO PRY PUB PUG PUN PUP PUT QUO RAG RAM RAN RAP RAT RAW RAY
28
+ REB RED REP RET RIB RID RIG RIM RIO RIP ROB ROD ROE RON ROT ROW ROY RUB
29
+ RUE RUG RUM RUN RYE SAC SAD SAG SAL SAM SAN SAP SAT SAW SAY SEA SEC SEE
30
+ SEN SET SEW SHE SHY SIN SIP SIR SIS SIT SKI SKY SLY SO SOB SOD SON SOP
31
+ SOW SOY SPA SPY SUB SUD SUE SUM SUN SUP TAB TAD TAG TAN TAP TAR TEA TED
32
+ TEE TEN THE THY TIC TIE TIM TIN TIP TO TOE TOG TOM TON TOO TOP TOW TOY
33
+ TRY TUB TUG TUM TUN TWO UN UP US USE VAN VAT VET VIE WAD WAG WAR WAS WAY
34
+ WE WEB WED WEE WET WHO WHY WIN WIT WOK WON WOO WOW WRY WU YAM YAP YAW YE
35
+ YEA YES YET YOU ABED ABEL ABET ABLE ABUT ACHE ACID ACME ACRE ACTA ACTS
36
+ ADAM ADDS ADEN AFAR AFRO AGEE AHEM AHOY AIDA AIDE AIDS AIRY AJAR AKIN
37
+ ALAN ALEC ALGA ALIA ALLY ALMA ALOE ALSO ALTO ALUM ALVA AMEN AMES AMID
38
+ AMMO AMOK AMOS AMRA ANDY ANEW ANNA ANNE ANTE ANTI AQUA ARAB ARCH AREA
39
+ ARGO ARID ARMY ARTS ARTY ASIA ASKS ATOM AUNT AURA AUTO AVER AVID AVIS
40
+ AVON AVOW AWAY AWRY BABE BABY BACH BACK BADE BAIL BAIT BAKE BALD BALE
41
+ BALI BALK BALL BALM BAND BANE BANG BANK BARB BARD BARE BARK BARN BARR
42
+ BASE BASH BASK BASS BATE BATH BAWD BAWL BEAD BEAK BEAM BEAN BEAR BEAT
43
+ BEAU BECK BEEF BEEN BEER BEET BELA BELL BELT BEND BENT BERG BERN BERT
44
+ BESS BEST BETA BETH BHOY BIAS BIDE BIEN BILE BILK BILL BIND BING BIRD
45
+ BITE BITS BLAB BLAT BLED BLEW BLOB BLOC BLOT BLOW BLUE BLUM BLUR BOAR
46
+ BOAT BOCA BOCK BODE BODY BOGY BOHR BOIL BOLD BOLO BOLT BOMB BONA BOND
47
+ BONE BONG BONN BONY BOOK BOOM BOON BOOT BORE BORG BORN BOSE BOSS BOTH
48
+ BOUT BOWL BOYD BRAD BRAE BRAG BRAN BRAY BRED BREW BRIG BRIM BROW BUCK
49
+ BUDD BUFF BULB BULK BULL BUNK BUNT BUOY BURG BURL BURN BURR BURT BURY
50
+ BUSH BUSS BUST BUSY BYTE CADY CAFE CAGE CAIN CAKE CALF CALL CALM CAME
51
+ CANE CANT CARD CARE CARL CARR CART CASE CASH CASK CAST CAVE CEIL CELL
52
+ CENT CERN CHAD CHAR CHAT CHAW CHEF CHEN CHEW CHIC CHIN CHOU CHOW CHUB
53
+ CHUG CHUM CITE CITY CLAD CLAM CLAN CLAW CLAY CLOD CLOG CLOT CLUB CLUE
54
+ COAL COAT COCA COCK COCO CODA CODE CODY COED COIL COIN COKE COLA COLD
55
+ COLT COMA COMB COME COOK COOL COON COOT CORD CORE CORK CORN COST COVE
56
+ COWL CRAB CRAG CRAM CRAY CREW CRIB CROW CRUD CUBA CUBE CUFF CULL CULT
57
+ CUNY CURB CURD CURE CURL CURT CUTS DADE DALE DAME DANA DANE DANG DANK
58
+ DARE DARK DARN DART DASH DATA DATE DAVE DAVY DAWN DAYS DEAD DEAF DEAL
59
+ DEAN DEAR DEBT DECK DEED DEEM DEER DEFT DEFY DELL DENT DENY DESK DIAL
60
+ DICE DIED DIET DIME DINE DING DINT DIRE DIRT DISC DISH DISK DIVE DOCK
61
+ DOES DOLE DOLL DOLT DOME DONE DOOM DOOR DORA DOSE DOTE DOUG DOUR DOVE
62
+ DOWN DRAB DRAG DRAM DRAW DREW DRUB DRUG DRUM DUAL DUCK DUCT DUEL DUET
63
+ DUKE DULL DUMB DUNE DUNK DUSK DUST DUTY EACH EARL EARN EASE EAST EASY
64
+ EBEN ECHO EDDY EDEN EDGE EDGY EDIT EDNA EGAN ELAN ELBA ELLA ELSE EMIL
65
+ EMIT EMMA ENDS ERIC EROS EVEN EVER EVIL EYED FACE FACT FADE FAIL FAIN
66
+ FAIR FAKE FALL FAME FANG FARM FAST FATE FAWN FEAR FEAT FEED FEEL FEET
67
+ FELL FELT FEND FERN FEST FEUD FIEF FIGS FILE FILL FILM FIND FINE FINK
68
+ FIRE FIRM FISH FISK FIST FITS FIVE FLAG FLAK FLAM FLAT FLAW FLEA FLED
69
+ FLEW FLIT FLOC FLOG FLOW FLUB FLUE FOAL FOAM FOGY FOIL FOLD FOLK FOND
70
+ FONT FOOD FOOL FOOT FORD FORE FORK FORM FORT FOSS FOUL FOUR FOWL FRAU
71
+ FRAY FRED FREE FRET FREY FROG FROM FUEL FULL FUME FUND FUNK FURY FUSE
72
+ FUSS GAFF GAGE GAIL GAIN GAIT GALA GALE GALL GALT GAME GANG GARB GARY
73
+ GASH GATE GAUL GAUR GAVE GAWK GEAR GELD GENE GENT GERM GETS GIBE GIFT
74
+ GILD GILL GILT GINA GIRD GIRL GIST GIVE GLAD GLEE GLEN GLIB GLOB GLOM
75
+ GLOW GLUE GLUM GLUT GOAD GOAL GOAT GOER GOES GOLD GOLF GONE GONG GOOD
76
+ GOOF GORE GORY GOSH GOUT GOWN GRAB GRAD GRAY GREG GREW GREY GRID GRIM
77
+ GRIN GRIT GROW GRUB GULF GULL GUNK GURU GUSH GUST GWEN GWYN HAAG HAAS
78
+ HACK HAIL HAIR HALE HALF HALL HALO HALT HAND HANG HANK HANS HARD HARK
79
+ HARM HART HASH HAST HATE HATH HAUL HAVE HAWK HAYS HEAD HEAL HEAR HEAT
80
+ HEBE HECK HEED HEEL HEFT HELD HELL HELM HERB HERD HERE HERO HERS HESS
81
+ HEWN HICK HIDE HIGH HIKE HILL HILT HIND HINT HIRE HISS HIVE HOBO HOCK
82
+ HOFF HOLD HOLE HOLM HOLT HOME HONE HONK HOOD HOOF HOOK HOOT HORN HOSE
83
+ HOST HOUR HOVE HOWE HOWL HOYT HUCK HUED HUFF HUGE HUGH HUGO HULK HULL
84
+ HUNK HUNT HURD HURL HURT HUSH HYDE HYMN IBIS ICON IDEA IDLE IFFY INCA
85
+ INCH INTO IONS IOTA IOWA IRIS IRMA IRON ISLE ITCH ITEM IVAN JACK JADE
86
+ JAIL JAKE JANE JAVA JEAN JEFF JERK JESS JEST JIBE JILL JILT JIVE JOAN
87
+ JOBS JOCK JOEL JOEY JOHN JOIN JOKE JOLT JOVE JUDD JUDE JUDO JUDY JUJU
88
+ JUKE JULY JUNE JUNK JUNO JURY JUST JUTE KAHN KALE KANE KANT KARL KATE
89
+ KEEL KEEN KENO KENT KERN KERR KEYS KICK KILL KIND KING KIRK KISS KITE
90
+ KLAN KNEE KNEW KNIT KNOB KNOT KNOW KOCH KONG KUDO KURD KURT KYLE LACE
91
+ LACK LACY LADY LAID LAIN LAIR LAKE LAMB LAME LAND LANE LANG LARD LARK
92
+ LASS LAST LATE LAUD LAVA LAWN LAWS LAYS LEAD LEAF LEAK LEAN LEAR LEEK
93
+ LEER LEFT LEND LENS LENT LEON LESK LESS LEST LETS LIAR LICE LICK LIED
94
+ LIEN LIES LIEU LIFE LIFT LIKE LILA LILT LILY LIMA LIMB LIME LIND LINE
95
+ LINK LINT LION LISA LIST LIVE LOAD LOAF LOAM LOAN LOCK LOFT LOGE LOIS
96
+ LOLA LONE LONG LOOK LOON LOOT LORD LORE LOSE LOSS LOST LOUD LOVE LOWE
97
+ LUCK LUCY LUGE LUKE LULU LUND LUNG LURA LURE LURK LUSH LUST LYLE LYNN
98
+ LYON LYRA MACE MADE MAGI MAID MAIL MAIN MAKE MALE MALI MALL MALT MANA
99
+ MANN MANY MARC MARE MARK MARS MART MARY MASH MASK MASS MAST MATE MATH
100
+ MAUL MAYO MEAD MEAL MEAN MEAT MEEK MEET MELD MELT MEMO MEND MENU MERT
101
+ MESH MESS MICE MIKE MILD MILE MILK MILL MILT MIMI MIND MINE MINI MINK
102
+ MINT MIRE MISS MIST MITE MITT MOAN MOAT MOCK MODE MOLD MOLE MOLL MOLT
103
+ MONA MONK MONT MOOD MOON MOOR MOOT MORE MORN MORT MOSS MOST MOTH MOVE
104
+ MUCH MUCK MUDD MUFF MULE MULL MURK MUSH MUST MUTE MUTT MYRA MYTH NAGY
105
+ NAIL NAIR NAME NARY NASH NAVE NAVY NEAL NEAR NEAT NECK NEED NEIL NELL
106
+ NEON NERO NESS NEST NEWS NEWT NIBS NICE NICK NILE NINA NINE NOAH NODE
107
+ NOEL NOLL NONE NOOK NOON NORM NOSE NOTE NOUN NOVA NUDE NULL NUMB OATH
108
+ OBEY OBOE ODIN OHIO OILY OINT OKAY OLAF OLDY OLGA OLIN OMAN OMEN OMIT
109
+ ONCE ONES ONLY ONTO ONUS ORAL ORGY OSLO OTIS OTTO OUCH OUST OUTS OVAL
110
+ OVEN OVER OWLY OWNS QUAD QUIT QUOD RACE RACK RACY RAFT RAGE RAID RAIL
111
+ RAIN RAKE RANK RANT RARE RASH RATE RAVE RAYS READ REAL REAM REAR RECK
112
+ REED REEF REEK REEL REID REIN RENA REND RENT REST RICE RICH RICK RIDE
113
+ RIFT RILL RIME RING RINK RISE RISK RITE ROAD ROAM ROAR ROBE ROCK RODE
114
+ ROIL ROLL ROME ROOD ROOF ROOK ROOM ROOT ROSA ROSE ROSS ROSY ROTH ROUT
115
+ ROVE ROWE ROWS RUBE RUBY RUDE RUDY RUIN RULE RUNG RUNS RUNT RUSE RUSH
116
+ RUSK RUSS RUST RUTH SACK SAFE SAGE SAID SAIL SALE SALK SALT SAME SAND
117
+ SANE SANG SANK SARA SAUL SAVE SAYS SCAN SCAR SCAT SCOT SEAL SEAM SEAR
118
+ SEAT SEED SEEK SEEM SEEN SEES SELF SELL SEND SENT SETS SEWN SHAG SHAM
119
+ SHAW SHAY SHED SHIM SHIN SHOD SHOE SHOT SHOW SHUN SHUT SICK SIDE SIFT
120
+ SIGH SIGN SILK SILL SILO SILT SINE SING SINK SIRE SITE SITS SITU SKAT
121
+ SKEW SKID SKIM SKIN SKIT SLAB SLAM SLAT SLAY SLED SLEW SLID SLIM SLIT
122
+ SLOB SLOG SLOT SLOW SLUG SLUM SLUR SMOG SMUG SNAG SNOB SNOW SNUB SNUG
123
+ SOAK SOAR SOCK SODA SOFA SOFT SOIL SOLD SOME SONG SOON SOOT SORE SORT
124
+ SOUL SOUR SOWN STAB STAG STAN STAR STAY STEM STEW STIR STOW STUB STUN
125
+ SUCH SUDS SUIT SULK SUMS SUNG SUNK SURE SURF SWAB SWAG SWAM SWAN SWAT
126
+ SWAY SWIM SWUM TACK TACT TAIL TAKE TALE TALK TALL TANK TASK TATE TAUT
127
+ TEAL TEAM TEAR TECH TEEM TEEN TEET TELL TEND TENT TERM TERN TESS TEST
128
+ THAN THAT THEE THEM THEN THEY THIN THIS THUD THUG TICK TIDE TIDY TIED
129
+ TIER TILE TILL TILT TIME TINA TINE TINT TINY TIRE TOAD TOGO TOIL TOLD
130
+ TOLL TONE TONG TONY TOOK TOOL TOOT TORE TORN TOTE TOUR TOUT TOWN TRAG
131
+ TRAM TRAY TREE TREK TRIG TRIM TRIO TROD TROT TROY TRUE TUBA TUBE TUCK
132
+ TUFT TUNA TUNE TUNG TURF TURN TUSK TWIG TWIN TWIT ULAN UNIT URGE USED
133
+ USER USES UTAH VAIL VAIN VALE VARY VASE VAST VEAL VEDA VEIL VEIN VEND
134
+ VENT VERB VERY VETO VICE VIEW VINE VISE VOID VOLT VOTE WACK WADE WAGE
135
+ WAIL WAIT WAKE WALE WALK WALL WALT WAND WANE WANG WANT WARD WARM WARN
136
+ WART WASH WAST WATS WATT WAVE WAVY WAYS WEAK WEAL WEAN WEAR WEED WEEK
137
+ WEIR WELD WELL WELT WENT WERE WERT WEST WHAM WHAT WHEE WHEN WHET WHOA
138
+ WHOM WICK WIFE WILD WILL WIND WINE WING WINK WINO WIRE WISE WISH WITH
139
+ WOLF WONT WOOD WOOL WORD WORE WORK WORM WORN WOVE WRIT WYNN YALE YANG
140
+ YANK YARD YARN YAWL YAWN YEAH YEAR YELL YOGA YOKE
141
+ ]
142
+ end
143
+ end
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: english_key
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Will Leinweber
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-04 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70230265656860 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70230265656860
25
+ description: RFC1751 for Ruby. A Convention for Human-Readable 128-bit Keys
26
+ email: will@bitfission.com
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - lib/english_key/rfc1751.rb
32
+ - lib/english_key/rfc1751_words.rb
33
+ - lib/english_key.rb
34
+ - Readme.md
35
+ homepage: http://github.com/will/english_key
36
+ licenses: []
37
+ post_install_message:
38
+ rdoc_options: []
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 1.8.6
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: RFC1751 for Ruby
59
+ test_files: []