english_key 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []