xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
libxrpl
crypto
RFC1751.cpp
1
#include <xrpl/crypto/RFC1751.h>
2
3
#include <xrpl/basics/StringUtilities.h>
4
#include <xrpl/beast/utility/instrumentation.h>
5
6
#include <boost/algorithm/string/classification.hpp>
7
#include <boost/algorithm/string/constants.hpp>
8
#include <boost/algorithm/string/split.hpp>
9
#include <boost/range/adaptor/copied.hpp>
10
11
#include <
cctype
>
12
#include <
cstddef
>
13
#include <
cstdint
>
14
#include <
cstring
>
15
#include <
string
>
16
#include <
string_view
>
17
#include <
vector
>
18
19
namespace
xrpl
{
20
21
//
22
// RFC 1751 code converted to C++/Boost.
23
//
24
25
char
const
*
RFC1751::dictionary
[2048] = {
26
"A"
,
"ABE"
,
"ACE"
,
"ACT"
,
"AD"
,
"ADA"
,
"ADD"
,
"AGO"
,
"AID"
,
"AIM"
,
"AIR"
,
"ALL"
,
27
"ALP"
,
"AM"
,
"AMY"
,
"AN"
,
"ANA"
,
"AND"
,
"ANN"
,
"ANT"
,
"ANY"
,
"APE"
,
"APS"
,
"APT"
,
28
"ARC"
,
"ARE"
,
"ARK"
,
"ARM"
,
"ART"
,
"AS"
,
"ASH"
,
"ASK"
,
"AT"
,
"ATE"
,
"AUG"
,
"AUK"
,
29
"AVE"
,
"AWE"
,
"AWK"
,
"AWL"
,
"AWN"
,
"AX"
,
"AYE"
,
"BAD"
,
"BAG"
,
"BAH"
,
"BAM"
,
"BAN"
,
30
"BAR"
,
"BAT"
,
"BAY"
,
"BE"
,
"BED"
,
"BEE"
,
"BEG"
,
"BEN"
,
"BET"
,
"BEY"
,
"BIB"
,
"BID"
,
31
"BIG"
,
"BIN"
,
"BIT"
,
"BOB"
,
"BOG"
,
"BON"
,
"BOO"
,
"BOP"
,
"BOW"
,
"BOY"
,
"BUB"
,
"BUD"
,
32
"BUG"
,
"BUM"
,
"BUN"
,
"BUS"
,
"BUT"
,
"BUY"
,
"BY"
,
"BYE"
,
"CAB"
,
"CAL"
,
"CAM"
,
"CAN"
,
33
"CAP"
,
"CAR"
,
"CAT"
,
"CAW"
,
"COD"
,
"COG"
,
"COL"
,
"CON"
,
"COO"
,
"COP"
,
"COT"
,
"COW"
,
34
"COY"
,
"CRY"
,
"CUB"
,
"CUE"
,
"CUP"
,
"CUR"
,
"CUT"
,
"DAB"
,
"DAD"
,
"DAM"
,
"DAN"
,
"DAR"
,
35
"DAY"
,
"DEE"
,
"DEL"
,
"DEN"
,
"DES"
,
"DEW"
,
"DID"
,
"DIE"
,
"DIG"
,
"DIN"
,
"DIP"
,
"DO"
,
36
"DOE"
,
"DOG"
,
"DON"
,
"DOT"
,
"DOW"
,
"DRY"
,
"DUB"
,
"DUD"
,
"DUE"
,
"DUG"
,
"DUN"
,
"EAR"
,
37
"EAT"
,
"ED"
,
"EEL"
,
"EGG"
,
"EGO"
,
"ELI"
,
"ELK"
,
"ELM"
,
"ELY"
,
"EM"
,
"END"
,
"EST"
,
38
"ETC"
,
"EVA"
,
"EVE"
,
"EWE"
,
"EYE"
,
"FAD"
,
"FAN"
,
"FAR"
,
"FAT"
,
"FAY"
,
"FED"
,
"FEE"
,
39
"FEW"
,
"FIB"
,
"FIG"
,
"FIN"
,
"FIR"
,
"FIT"
,
"FLO"
,
"FLY"
,
"FOE"
,
"FOG"
,
"FOR"
,
"FRY"
,
40
"FUM"
,
"FUN"
,
"FUR"
,
"GAB"
,
"GAD"
,
"GAG"
,
"GAL"
,
"GAM"
,
"GAP"
,
"GAS"
,
"GAY"
,
"GEE"
,
41
"GEL"
,
"GEM"
,
"GET"
,
"GIG"
,
"GIL"
,
"GIN"
,
"GO"
,
"GOT"
,
"GUM"
,
"GUN"
,
"GUS"
,
"GUT"
,
42
"GUY"
,
"GYM"
,
"GYP"
,
"HA"
,
"HAD"
,
"HAL"
,
"HAM"
,
"HAN"
,
"HAP"
,
"HAS"
,
"HAT"
,
"HAW"
,
43
"HAY"
,
"HE"
,
"HEM"
,
"HEN"
,
"HER"
,
"HEW"
,
"HEY"
,
"HI"
,
"HID"
,
"HIM"
,
"HIP"
,
"HIS"
,
44
"HIT"
,
"HO"
,
"HOB"
,
"HOC"
,
"HOE"
,
"HOG"
,
"HOP"
,
"HOT"
,
"HOW"
,
"HUB"
,
"HUE"
,
"HUG"
,
45
"HUH"
,
"HUM"
,
"HUT"
,
"I"
,
"ICY"
,
"IDA"
,
"IF"
,
"IKE"
,
"ILL"
,
"INK"
,
"INN"
,
"IO"
,
46
"ION"
,
"IQ"
,
"IRA"
,
"IRE"
,
"IRK"
,
"IS"
,
"IT"
,
"ITS"
,
"IVY"
,
"JAB"
,
"JAG"
,
"JAM"
,
47
"JAN"
,
"JAR"
,
"JAW"
,
"JAY"
,
"JET"
,
"JIG"
,
"JIM"
,
"JO"
,
"JOB"
,
"JOE"
,
"JOG"
,
"JOT"
,
48
"JOY"
,
"JUG"
,
"JUT"
,
"KAY"
,
"KEG"
,
"KEN"
,
"KEY"
,
"KID"
,
"KIM"
,
"KIN"
,
"KIT"
,
"LA"
,
49
"LAB"
,
"LAC"
,
"LAD"
,
"LAG"
,
"LAM"
,
"LAP"
,
"LAW"
,
"LAY"
,
"LEA"
,
"LED"
,
"LEE"
,
"LEG"
,
50
"LEN"
,
"LEO"
,
"LET"
,
"LEW"
,
"LID"
,
"LIE"
,
"LIN"
,
"LIP"
,
"LIT"
,
"LO"
,
"LOB"
,
"LOG"
,
51
"LOP"
,
"LOS"
,
"LOT"
,
"LOU"
,
"LOW"
,
"LOY"
,
"LUG"
,
"LYE"
,
"MA"
,
"MAC"
,
"MAD"
,
"MAE"
,
52
"MAN"
,
"MAO"
,
"MAP"
,
"MAT"
,
"MAW"
,
"MAY"
,
"ME"
,
"MEG"
,
"MEL"
,
"MEN"
,
"MET"
,
"MEW"
,
53
"MID"
,
"MIN"
,
"MIT"
,
"MOB"
,
"MOD"
,
"MOE"
,
"MOO"
,
"MOP"
,
"MOS"
,
"MOT"
,
"MOW"
,
"MUD"
,
54
"MUG"
,
"MUM"
,
"MY"
,
"NAB"
,
"NAG"
,
"NAN"
,
"NAP"
,
"NAT"
,
"NAY"
,
"NE"
,
"NED"
,
"NEE"
,
55
"NET"
,
"NEW"
,
"NIB"
,
"NIL"
,
"NIP"
,
"NIT"
,
"NO"
,
"NOB"
,
"NOD"
,
"NON"
,
"NOR"
,
"NOT"
,
56
"NOV"
,
"NOW"
,
"NU"
,
"NUN"
,
"NUT"
,
"O"
,
"OAF"
,
"OAK"
,
"OAR"
,
"OAT"
,
"ODD"
,
"ODE"
,
57
"OF"
,
"OFF"
,
"OFT"
,
"OH"
,
"OIL"
,
"OK"
,
"OLD"
,
"ON"
,
"ONE"
,
"OR"
,
"ORB"
,
"ORE"
,
58
"ORR"
,
"OS"
,
"OTT"
,
"OUR"
,
"OUT"
,
"OVA"
,
"OW"
,
"OWE"
,
"OWL"
,
"OWN"
,
"OX"
,
"PA"
,
59
"PAD"
,
"PAL"
,
"PAM"
,
"PAN"
,
"PAP"
,
"PAR"
,
"PAT"
,
"PAW"
,
"PAY"
,
"PEA"
,
"PEG"
,
"PEN"
,
60
"PEP"
,
"PER"
,
"PET"
,
"PEW"
,
"PHI"
,
"PI"
,
"PIE"
,
"PIN"
,
"PIT"
,
"PLY"
,
"PO"
,
"POD"
,
61
"POE"
,
"POP"
,
"POT"
,
"POW"
,
"PRO"
,
"PRY"
,
"PUB"
,
"PUG"
,
"PUN"
,
"PUP"
,
"PUT"
,
"QUO"
,
62
"RAG"
,
"RAM"
,
"RAN"
,
"RAP"
,
"RAT"
,
"RAW"
,
"RAY"
,
"REB"
,
"RED"
,
"REP"
,
"RET"
,
"RIB"
,
63
"RID"
,
"RIG"
,
"RIM"
,
"RIO"
,
"RIP"
,
"ROB"
,
"ROD"
,
"ROE"
,
"RON"
,
"ROT"
,
"ROW"
,
"ROY"
,
64
"RUB"
,
"RUE"
,
"RUG"
,
"RUM"
,
"RUN"
,
"RYE"
,
"SAC"
,
"SAD"
,
"SAG"
,
"SAL"
,
"SAM"
,
"SAN"
,
65
"SAP"
,
"SAT"
,
"SAW"
,
"SAY"
,
"SEA"
,
"SEC"
,
"SEE"
,
"SEN"
,
"SET"
,
"SEW"
,
"SHE"
,
"SHY"
,
66
"SIN"
,
"SIP"
,
"SIR"
,
"SIS"
,
"SIT"
,
"SKI"
,
"SKY"
,
"SLY"
,
"SO"
,
"SOB"
,
"SOD"
,
"SON"
,
67
"SOP"
,
"SOW"
,
"SOY"
,
"SPA"
,
"SPY"
,
"SUB"
,
"SUD"
,
"SUE"
,
"SUM"
,
"SUN"
,
"SUP"
,
"TAB"
,
68
"TAD"
,
"TAG"
,
"TAN"
,
"TAP"
,
"TAR"
,
"TEA"
,
"TED"
,
"TEE"
,
"TEN"
,
"THE"
,
"THY"
,
"TIC"
,
69
"TIE"
,
"TIM"
,
"TIN"
,
"TIP"
,
"TO"
,
"TOE"
,
"TOG"
,
"TOM"
,
"TON"
,
"TOO"
,
"TOP"
,
"TOW"
,
70
"TOY"
,
"TRY"
,
"TUB"
,
"TUG"
,
"TUM"
,
"TUN"
,
"TWO"
,
"UN"
,
"UP"
,
"US"
,
"USE"
,
"VAN"
,
71
"VAT"
,
"VET"
,
"VIE"
,
"WAD"
,
"WAG"
,
"WAR"
,
"WAS"
,
"WAY"
,
"WE"
,
"WEB"
,
"WED"
,
"WEE"
,
72
"WET"
,
"WHO"
,
"WHY"
,
"WIN"
,
"WIT"
,
"WOK"
,
"WON"
,
"WOO"
,
"WOW"
,
"WRY"
,
"WU"
,
"YAM"
,
73
"YAP"
,
"YAW"
,
"YE"
,
"YEA"
,
"YES"
,
"YET"
,
"YOU"
,
"ABED"
,
"ABEL"
,
"ABET"
,
"ABLE"
,
"ABUT"
,
74
"ACHE"
,
"ACID"
,
"ACME"
,
"ACRE"
,
"ACTA"
,
"ACTS"
,
"ADAM"
,
"ADDS"
,
"ADEN"
,
"AFAR"
,
"AFRO"
,
"AGEE"
,
75
"AHEM"
,
"AHOY"
,
"AIDA"
,
"AIDE"
,
"AIDS"
,
"AIRY"
,
"AJAR"
,
"AKIN"
,
"ALAN"
,
"ALEC"
,
"ALGA"
,
"ALIA"
,
76
"ALLY"
,
"ALMA"
,
"ALOE"
,
"ALSO"
,
"ALTO"
,
"ALUM"
,
"ALVA"
,
"AMEN"
,
"AMES"
,
"AMID"
,
"AMMO"
,
"AMOK"
,
77
"AMOS"
,
"AMRA"
,
"ANDY"
,
"ANEW"
,
"ANNA"
,
"ANNE"
,
"ANTE"
,
"ANTI"
,
"AQUA"
,
"ARAB"
,
"ARCH"
,
"AREA"
,
78
"ARGO"
,
"ARID"
,
"ARMY"
,
"ARTS"
,
"ARTY"
,
"ASIA"
,
"ASKS"
,
"ATOM"
,
"AUNT"
,
"AURA"
,
"AUTO"
,
"AVER"
,
79
"AVID"
,
"AVIS"
,
"AVON"
,
"AVOW"
,
"AWAY"
,
"AWRY"
,
"BABE"
,
"BABY"
,
"BACH"
,
"BACK"
,
"BADE"
,
"BAIL"
,
80
"BAIT"
,
"BAKE"
,
"BALD"
,
"BALE"
,
"BALI"
,
"BALK"
,
"BALL"
,
"BALM"
,
"BAND"
,
"BANE"
,
"BANG"
,
"BANK"
,
81
"BARB"
,
"BARD"
,
"BARE"
,
"BARK"
,
"BARN"
,
"BARR"
,
"BASE"
,
"BASH"
,
"BASK"
,
"BASS"
,
"BATE"
,
"BATH"
,
82
"BAWD"
,
"BAWL"
,
"BEAD"
,
"BEAK"
,
"BEAM"
,
"BEAN"
,
"BEAR"
,
"BEAT"
,
"BEAU"
,
"BECK"
,
"BEEF"
,
"BEEN"
,
83
"BEER"
,
"BEET"
,
"BELA"
,
"BELL"
,
"BELT"
,
"BEND"
,
"BENT"
,
"BERG"
,
"BERN"
,
"BERT"
,
"BESS"
,
"BEST"
,
84
"BETA"
,
"BETH"
,
"BHOY"
,
"BIAS"
,
"BIDE"
,
"BIEN"
,
"BILE"
,
"BILK"
,
"BILL"
,
"BIND"
,
"BING"
,
"BIRD"
,
85
"BITE"
,
"BITS"
,
"BLAB"
,
"BLAT"
,
"BLED"
,
"BLEW"
,
"BLOB"
,
"BLOC"
,
"BLOT"
,
"BLOW"
,
"BLUE"
,
"BLUM"
,
86
"BLUR"
,
"BOAR"
,
"BOAT"
,
"BOCA"
,
"BOCK"
,
"BODE"
,
"BODY"
,
"BOGY"
,
"BOHR"
,
"BOIL"
,
"BOLD"
,
"BOLO"
,
87
"BOLT"
,
"BOMB"
,
"BONA"
,
"BOND"
,
"BONE"
,
"BONG"
,
"BONN"
,
"BONY"
,
"BOOK"
,
"BOOM"
,
"BOON"
,
"BOOT"
,
88
"BORE"
,
"BORG"
,
"BORN"
,
"BOSE"
,
"BOSS"
,
"BOTH"
,
"BOUT"
,
"BOWL"
,
"BOYD"
,
"BRAD"
,
"BRAE"
,
"BRAG"
,
89
"BRAN"
,
"BRAY"
,
"BRED"
,
"BREW"
,
"BRIG"
,
"BRIM"
,
"BROW"
,
"BUCK"
,
"BUDD"
,
"BUFF"
,
"BULB"
,
"BULK"
,
90
"BULL"
,
"BUNK"
,
"BUNT"
,
"BUOY"
,
"BURG"
,
"BURL"
,
"BURN"
,
"BURR"
,
"BURT"
,
"BURY"
,
"BUSH"
,
"BUSS"
,
91
"BUST"
,
"BUSY"
,
"BYTE"
,
"CADY"
,
"CAFE"
,
"CAGE"
,
"CAIN"
,
"CAKE"
,
"CALF"
,
"CALL"
,
"CALM"
,
"CAME"
,
92
"CANE"
,
"CANT"
,
"CARD"
,
"CARE"
,
"CARL"
,
"CARR"
,
"CART"
,
"CASE"
,
"CASH"
,
"CASK"
,
"CAST"
,
"CAVE"
,
93
"CEIL"
,
"CELL"
,
"CENT"
,
"CERN"
,
"CHAD"
,
"CHAR"
,
"CHAT"
,
"CHAW"
,
"CHEF"
,
"CHEN"
,
"CHEW"
,
"CHIC"
,
94
"CHIN"
,
"CHOU"
,
"CHOW"
,
"CHUB"
,
"CHUG"
,
"CHUM"
,
"CITE"
,
"CITY"
,
"CLAD"
,
"CLAM"
,
"CLAN"
,
"CLAW"
,
95
"CLAY"
,
"CLOD"
,
"CLOG"
,
"CLOT"
,
"CLUB"
,
"CLUE"
,
"COAL"
,
"COAT"
,
"COCA"
,
"COCK"
,
"COCO"
,
"CODA"
,
96
"CODE"
,
"CODY"
,
"COED"
,
"COIL"
,
"COIN"
,
"COKE"
,
"COLA"
,
"COLD"
,
"COLT"
,
"COMA"
,
"COMB"
,
"COME"
,
97
"COOK"
,
"COOL"
,
"COON"
,
"COOT"
,
"CORD"
,
"CORE"
,
"CORK"
,
"CORN"
,
"COST"
,
"COVE"
,
"COWL"
,
"CRAB"
,
98
"CRAG"
,
"CRAM"
,
"CRAY"
,
"CREW"
,
"CRIB"
,
"CROW"
,
"CRUD"
,
"CUBA"
,
"CUBE"
,
"CUFF"
,
"CULL"
,
"CULT"
,
99
"CUNY"
,
"CURB"
,
"CURD"
,
"CURE"
,
"CURL"
,
"CURT"
,
"CUTS"
,
"DADE"
,
"DALE"
,
"DAME"
,
"DANA"
,
"DANE"
,
100
"DANG"
,
"DANK"
,
"DARE"
,
"DARK"
,
"DARN"
,
"DART"
,
"DASH"
,
"DATA"
,
"DATE"
,
"DAVE"
,
"DAVY"
,
"DAWN"
,
101
"DAYS"
,
"DEAD"
,
"DEAF"
,
"DEAL"
,
"DEAN"
,
"DEAR"
,
"DEBT"
,
"DECK"
,
"DEED"
,
"DEEM"
,
"DEER"
,
"DEFT"
,
102
"DEFY"
,
"DELL"
,
"DENT"
,
"DENY"
,
"DESK"
,
"DIAL"
,
"DICE"
,
"DIED"
,
"DIET"
,
"DIME"
,
"DINE"
,
"DING"
,
103
"DINT"
,
"DIRE"
,
"DIRT"
,
"DISC"
,
"DISH"
,
"DISK"
,
"DIVE"
,
"DOCK"
,
"DOES"
,
"DOLE"
,
"DOLL"
,
"DOLT"
,
104
"DOME"
,
"DONE"
,
"DOOM"
,
"DOOR"
,
"DORA"
,
"DOSE"
,
"DOTE"
,
"DOUG"
,
"DOUR"
,
"DOVE"
,
"DOWN"
,
"DRAB"
,
105
"DRAG"
,
"DRAM"
,
"DRAW"
,
"DREW"
,
"DRUB"
,
"DRUG"
,
"DRUM"
,
"DUAL"
,
"DUCK"
,
"DUCT"
,
"DUEL"
,
"DUET"
,
106
"DUKE"
,
"DULL"
,
"DUMB"
,
"DUNE"
,
"DUNK"
,
"DUSK"
,
"DUST"
,
"DUTY"
,
"EACH"
,
"EARL"
,
"EARN"
,
"EASE"
,
107
"EAST"
,
"EASY"
,
"EBEN"
,
"ECHO"
,
"EDDY"
,
"EDEN"
,
"EDGE"
,
"EDGY"
,
"EDIT"
,
"EDNA"
,
"EGAN"
,
"ELAN"
,
108
"ELBA"
,
"ELLA"
,
"ELSE"
,
"EMIL"
,
"EMIT"
,
"EMMA"
,
"ENDS"
,
"ERIC"
,
"EROS"
,
"EVEN"
,
"EVER"
,
"EVIL"
,
109
"EYED"
,
"FACE"
,
"FACT"
,
"FADE"
,
"FAIL"
,
"FAIN"
,
"FAIR"
,
"FAKE"
,
"FALL"
,
"FAME"
,
"FANG"
,
"FARM"
,
110
"FAST"
,
"FATE"
,
"FAWN"
,
"FEAR"
,
"FEAT"
,
"FEED"
,
"FEEL"
,
"FEET"
,
"FELL"
,
"FELT"
,
"FEND"
,
"FERN"
,
111
"FEST"
,
"FEUD"
,
"FIEF"
,
"FIGS"
,
"FILE"
,
"FILL"
,
"FILM"
,
"FIND"
,
"FINE"
,
"FINK"
,
"FIRE"
,
"FIRM"
,
112
"FISH"
,
"FISK"
,
"FIST"
,
"FITS"
,
"FIVE"
,
"FLAG"
,
"FLAK"
,
"FLAM"
,
"FLAT"
,
"FLAW"
,
"FLEA"
,
"FLED"
,
113
"FLEW"
,
"FLIT"
,
"FLOC"
,
"FLOG"
,
"FLOW"
,
"FLUB"
,
"FLUE"
,
"FOAL"
,
"FOAM"
,
"FOGY"
,
"FOIL"
,
"FOLD"
,
114
"FOLK"
,
"FOND"
,
"FONT"
,
"FOOD"
,
"FOOL"
,
"FOOT"
,
"FORD"
,
"FORE"
,
"FORK"
,
"FORM"
,
"FORT"
,
"FOSS"
,
115
"FOUL"
,
"FOUR"
,
"FOWL"
,
"FRAU"
,
"FRAY"
,
"FRED"
,
"FREE"
,
"FRET"
,
"FREY"
,
"FROG"
,
"FROM"
,
"FUEL"
,
116
"FULL"
,
"FUME"
,
"FUND"
,
"FUNK"
,
"FURY"
,
"FUSE"
,
"FUSS"
,
"GAFF"
,
"GAGE"
,
"GAIL"
,
"GAIN"
,
"GAIT"
,
117
"GALA"
,
"GALE"
,
"GALL"
,
"GALT"
,
"GAME"
,
"GANG"
,
"GARB"
,
"GARY"
,
"GASH"
,
"GATE"
,
"GAUL"
,
"GAUR"
,
118
"GAVE"
,
"GAWK"
,
"GEAR"
,
"GELD"
,
"GENE"
,
"GENT"
,
"GERM"
,
"GETS"
,
"GIBE"
,
"GIFT"
,
"GILD"
,
"GILL"
,
119
"GILT"
,
"GINA"
,
"GIRD"
,
"GIRL"
,
"GIST"
,
"GIVE"
,
"GLAD"
,
"GLEE"
,
"GLEN"
,
"GLIB"
,
"GLOB"
,
"GLOM"
,
120
"GLOW"
,
"GLUE"
,
"GLUM"
,
"GLUT"
,
"GOAD"
,
"GOAL"
,
"GOAT"
,
"GOER"
,
"GOES"
,
"GOLD"
,
"GOLF"
,
"GONE"
,
121
"GONG"
,
"GOOD"
,
"GOOF"
,
"GORE"
,
"GORY"
,
"GOSH"
,
"GOUT"
,
"GOWN"
,
"GRAB"
,
"GRAD"
,
"GRAY"
,
"GREG"
,
122
"GREW"
,
"GREY"
,
"GRID"
,
"GRIM"
,
"GRIN"
,
"GRIT"
,
"GROW"
,
"GRUB"
,
"GULF"
,
"GULL"
,
"GUNK"
,
"GURU"
,
123
"GUSH"
,
"GUST"
,
"GWEN"
,
"GWYN"
,
"HAAG"
,
"HAAS"
,
"HACK"
,
"HAIL"
,
"HAIR"
,
"HALE"
,
"HALF"
,
"HALL"
,
124
"HALO"
,
"HALT"
,
"HAND"
,
"HANG"
,
"HANK"
,
"HANS"
,
"HARD"
,
"HARK"
,
"HARM"
,
"HART"
,
"HASH"
,
"HAST"
,
125
"HATE"
,
"HATH"
,
"HAUL"
,
"HAVE"
,
"HAWK"
,
"HAYS"
,
"HEAD"
,
"HEAL"
,
"HEAR"
,
"HEAT"
,
"HEBE"
,
"HECK"
,
126
"HEED"
,
"HEEL"
,
"HEFT"
,
"HELD"
,
"HELL"
,
"HELM"
,
"HERB"
,
"HERD"
,
"HERE"
,
"HERO"
,
"HERS"
,
"HESS"
,
127
"HEWN"
,
"HICK"
,
"HIDE"
,
"HIGH"
,
"HIKE"
,
"HILL"
,
"HILT"
,
"HIND"
,
"HINT"
,
"HIRE"
,
"HISS"
,
"HIVE"
,
128
"HOBO"
,
"HOCK"
,
"HOFF"
,
"HOLD"
,
"HOLE"
,
"HOLM"
,
"HOLT"
,
"HOME"
,
"HONE"
,
"HONK"
,
"HOOD"
,
"HOOF"
,
129
"HOOK"
,
"HOOT"
,
"HORN"
,
"HOSE"
,
"HOST"
,
"HOUR"
,
"HOVE"
,
"HOWE"
,
"HOWL"
,
"HOYT"
,
"HUCK"
,
"HUED"
,
130
"HUFF"
,
"HUGE"
,
"HUGH"
,
"HUGO"
,
"HULK"
,
"HULL"
,
"HUNK"
,
"HUNT"
,
"HURD"
,
"HURL"
,
"HURT"
,
"HUSH"
,
131
"HYDE"
,
"HYMN"
,
"IBIS"
,
"ICON"
,
"IDEA"
,
"IDLE"
,
"IFFY"
,
"INCA"
,
"INCH"
,
"INTO"
,
"IONS"
,
"IOTA"
,
132
"IOWA"
,
"IRIS"
,
"IRMA"
,
"IRON"
,
"ISLE"
,
"ITCH"
,
"ITEM"
,
"IVAN"
,
"JACK"
,
"JADE"
,
"JAIL"
,
"JAKE"
,
133
"JANE"
,
"JAVA"
,
"JEAN"
,
"JEFF"
,
"JERK"
,
"JESS"
,
"JEST"
,
"JIBE"
,
"JILL"
,
"JILT"
,
"JIVE"
,
"JOAN"
,
134
"JOBS"
,
"JOCK"
,
"JOEL"
,
"JOEY"
,
"JOHN"
,
"JOIN"
,
"JOKE"
,
"JOLT"
,
"JOVE"
,
"JUDD"
,
"JUDE"
,
"JUDO"
,
135
"JUDY"
,
"JUJU"
,
"JUKE"
,
"JULY"
,
"JUNE"
,
"JUNK"
,
"JUNO"
,
"JURY"
,
"JUST"
,
"JUTE"
,
"KAHN"
,
"KALE"
,
136
"KANE"
,
"KANT"
,
"KARL"
,
"KATE"
,
"KEEL"
,
"KEEN"
,
"KENO"
,
"KENT"
,
"KERN"
,
"KERR"
,
"KEYS"
,
"KICK"
,
137
"KILL"
,
"KIND"
,
"KING"
,
"KIRK"
,
"KISS"
,
"KITE"
,
"KLAN"
,
"KNEE"
,
"KNEW"
,
"KNIT"
,
"KNOB"
,
"KNOT"
,
138
"KNOW"
,
"KOCH"
,
"KONG"
,
"KUDO"
,
"KURD"
,
"KURT"
,
"KYLE"
,
"LACE"
,
"LACK"
,
"LACY"
,
"LADY"
,
"LAID"
,
139
"LAIN"
,
"LAIR"
,
"LAKE"
,
"LAMB"
,
"LAME"
,
"LAND"
,
"LANE"
,
"LANG"
,
"LARD"
,
"LARK"
,
"LASS"
,
"LAST"
,
140
"LATE"
,
"LAUD"
,
"LAVA"
,
"LAWN"
,
"LAWS"
,
"LAYS"
,
"LEAD"
,
"LEAF"
,
"LEAK"
,
"LEAN"
,
"LEAR"
,
"LEEK"
,
141
"LEER"
,
"LEFT"
,
"LEND"
,
"LENS"
,
"LENT"
,
"LEON"
,
"LESK"
,
"LESS"
,
"LEST"
,
"LETS"
,
"LIAR"
,
"LICE"
,
142
"LICK"
,
"LIED"
,
"LIEN"
,
"LIES"
,
"LIEU"
,
"LIFE"
,
"LIFT"
,
"LIKE"
,
"LILA"
,
"LILT"
,
"LILY"
,
"LIMA"
,
143
"LIMB"
,
"LIME"
,
"LIND"
,
"LINE"
,
"LINK"
,
"LINT"
,
"LION"
,
"LISA"
,
"LIST"
,
"LIVE"
,
"LOAD"
,
"LOAF"
,
144
"LOAM"
,
"LOAN"
,
"LOCK"
,
"LOFT"
,
"LOGE"
,
"LOIS"
,
"LOLA"
,
"LONE"
,
"LONG"
,
"LOOK"
,
"LOON"
,
"LOOT"
,
145
"LORD"
,
"LORE"
,
"LOSE"
,
"LOSS"
,
"LOST"
,
"LOUD"
,
"LOVE"
,
"LOWE"
,
"LUCK"
,
"LUCY"
,
"LUGE"
,
"LUKE"
,
146
"LULU"
,
"LUND"
,
"LUNG"
,
"LURA"
,
"LURE"
,
"LURK"
,
"LUSH"
,
"LUST"
,
"LYLE"
,
"LYNN"
,
"LYON"
,
"LYRA"
,
147
"MACE"
,
"MADE"
,
"MAGI"
,
"MAID"
,
"MAIL"
,
"MAIN"
,
"MAKE"
,
"MALE"
,
"MALI"
,
"MALL"
,
"MALT"
,
"MANA"
,
148
"MANN"
,
"MANY"
,
"MARC"
,
"MARE"
,
"MARK"
,
"MARS"
,
"MART"
,
"MARY"
,
"MASH"
,
"MASK"
,
"MASS"
,
"MAST"
,
149
"MATE"
,
"MATH"
,
"MAUL"
,
"MAYO"
,
"MEAD"
,
"MEAL"
,
"MEAN"
,
"MEAT"
,
"MEEK"
,
"MEET"
,
"MELD"
,
"MELT"
,
150
"MEMO"
,
"MEND"
,
"MENU"
,
"MERT"
,
"MESH"
,
"MESS"
,
"MICE"
,
"MIKE"
,
"MILD"
,
"MILE"
,
"MILK"
,
"MILL"
,
151
"MILT"
,
"MIMI"
,
"MIND"
,
"MINE"
,
"MINI"
,
"MINK"
,
"MINT"
,
"MIRE"
,
"MISS"
,
"MIST"
,
"MITE"
,
"MITT"
,
152
"MOAN"
,
"MOAT"
,
"MOCK"
,
"MODE"
,
"MOLD"
,
"MOLE"
,
"MOLL"
,
"MOLT"
,
"MONA"
,
"MONK"
,
"MONT"
,
"MOOD"
,
153
"MOON"
,
"MOOR"
,
"MOOT"
,
"MORE"
,
"MORN"
,
"MORT"
,
"MOSS"
,
"MOST"
,
"MOTH"
,
"MOVE"
,
"MUCH"
,
"MUCK"
,
154
"MUDD"
,
"MUFF"
,
"MULE"
,
"MULL"
,
"MURK"
,
"MUSH"
,
"MUST"
,
"MUTE"
,
"MUTT"
,
"MYRA"
,
"MYTH"
,
"NAGY"
,
155
"NAIL"
,
"NAIR"
,
"NAME"
,
"NARY"
,
"NASH"
,
"NAVE"
,
"NAVY"
,
"NEAL"
,
"NEAR"
,
"NEAT"
,
"NECK"
,
"NEED"
,
156
"NEIL"
,
"NELL"
,
"NEON"
,
"NERO"
,
"NESS"
,
"NEST"
,
"NEWS"
,
"NEWT"
,
"NIBS"
,
"NICE"
,
"NICK"
,
"NILE"
,
157
"NINA"
,
"NINE"
,
"NOAH"
,
"NODE"
,
"NOEL"
,
"NOLL"
,
"NONE"
,
"NOOK"
,
"NOON"
,
"NORM"
,
"NOSE"
,
"NOTE"
,
158
"NOUN"
,
"NOVA"
,
"NUDE"
,
"NULL"
,
"NUMB"
,
"OATH"
,
"OBEY"
,
"OBOE"
,
"ODIN"
,
"OHIO"
,
"OILY"
,
"OINT"
,
159
"OKAY"
,
"OLAF"
,
"OLDY"
,
"OLGA"
,
"OLIN"
,
"OMAN"
,
"OMEN"
,
"OMIT"
,
"ONCE"
,
"ONES"
,
"ONLY"
,
"ONTO"
,
160
"ONUS"
,
"ORAL"
,
"ORGY"
,
"OSLO"
,
"OTIS"
,
"OTTO"
,
"OUCH"
,
"OUST"
,
"OUTS"
,
"OVAL"
,
"OVEN"
,
"OVER"
,
161
"OWLY"
,
"OWNS"
,
"QUAD"
,
"QUIT"
,
"QUOD"
,
"RACE"
,
"RACK"
,
"RACY"
,
"RAFT"
,
"RAGE"
,
"RAID"
,
"RAIL"
,
162
"RAIN"
,
"RAKE"
,
"RANK"
,
"RANT"
,
"RARE"
,
"RASH"
,
"RATE"
,
"RAVE"
,
"RAYS"
,
"READ"
,
"REAL"
,
"REAM"
,
163
"REAR"
,
"RECK"
,
"REED"
,
"REEF"
,
"REEK"
,
"REEL"
,
"REID"
,
"REIN"
,
"RENA"
,
"REND"
,
"RENT"
,
"REST"
,
164
"RICE"
,
"RICH"
,
"RICK"
,
"RIDE"
,
"RIFT"
,
"RILL"
,
"RIME"
,
"RING"
,
"RINK"
,
"RISE"
,
"RISK"
,
"RITE"
,
165
"ROAD"
,
"ROAM"
,
"ROAR"
,
"ROBE"
,
"ROCK"
,
"RODE"
,
"ROIL"
,
"ROLL"
,
"ROME"
,
"ROOD"
,
"ROOF"
,
"ROOK"
,
166
"ROOM"
,
"ROOT"
,
"ROSA"
,
"ROSE"
,
"ROSS"
,
"ROSY"
,
"ROTH"
,
"ROUT"
,
"ROVE"
,
"ROWE"
,
"ROWS"
,
"RUBE"
,
167
"RUBY"
,
"RUDE"
,
"RUDY"
,
"RUIN"
,
"RULE"
,
"RUNG"
,
"RUNS"
,
"RUNT"
,
"RUSE"
,
"RUSH"
,
"RUSK"
,
"RUSS"
,
168
"RUST"
,
"RUTH"
,
"SACK"
,
"SAFE"
,
"SAGE"
,
"SAID"
,
"SAIL"
,
"SALE"
,
"SALK"
,
"SALT"
,
"SAME"
,
"SAND"
,
169
"SANE"
,
"SANG"
,
"SANK"
,
"SARA"
,
"SAUL"
,
"SAVE"
,
"SAYS"
,
"SCAN"
,
"SCAR"
,
"SCAT"
,
"SCOT"
,
"SEAL"
,
170
"SEAM"
,
"SEAR"
,
"SEAT"
,
"SEED"
,
"SEEK"
,
"SEEM"
,
"SEEN"
,
"SEES"
,
"SELF"
,
"SELL"
,
"SEND"
,
"SENT"
,
171
"SETS"
,
"SEWN"
,
"SHAG"
,
"SHAM"
,
"SHAW"
,
"SHAY"
,
"SHED"
,
"SHIM"
,
"SHIN"
,
"SHOD"
,
"SHOE"
,
"SHOT"
,
172
"SHOW"
,
"SHUN"
,
"SHUT"
,
"SICK"
,
"SIDE"
,
"SIFT"
,
"SIGH"
,
"SIGN"
,
"SILK"
,
"SILL"
,
"SILO"
,
"SILT"
,
173
"SINE"
,
"SING"
,
"SINK"
,
"SIRE"
,
"SITE"
,
"SITS"
,
"SITU"
,
"SKAT"
,
"SKEW"
,
"SKID"
,
"SKIM"
,
"SKIN"
,
174
"SKIT"
,
"SLAB"
,
"SLAM"
,
"SLAT"
,
"SLAY"
,
"SLED"
,
"SLEW"
,
"SLID"
,
"SLIM"
,
"SLIT"
,
"SLOB"
,
"SLOG"
,
175
"SLOT"
,
"SLOW"
,
"SLUG"
,
"SLUM"
,
"SLUR"
,
"SMOG"
,
"SMUG"
,
"SNAG"
,
"SNOB"
,
"SNOW"
,
"SNUB"
,
"SNUG"
,
176
"SOAK"
,
"SOAR"
,
"SOCK"
,
"SODA"
,
"SOFA"
,
"SOFT"
,
"SOIL"
,
"SOLD"
,
"SOME"
,
"SONG"
,
"SOON"
,
"SOOT"
,
177
"SORE"
,
"SORT"
,
"SOUL"
,
"SOUR"
,
"SOWN"
,
"STAB"
,
"STAG"
,
"STAN"
,
"STAR"
,
"STAY"
,
"STEM"
,
"STEW"
,
178
"STIR"
,
"STOW"
,
"STUB"
,
"STUN"
,
"SUCH"
,
"SUDS"
,
"SUIT"
,
"SULK"
,
"SUMS"
,
"SUNG"
,
"SUNK"
,
"SURE"
,
179
"SURF"
,
"SWAB"
,
"SWAG"
,
"SWAM"
,
"SWAN"
,
"SWAT"
,
"SWAY"
,
"SWIM"
,
"SWUM"
,
"TACK"
,
"TACT"
,
"TAIL"
,
180
"TAKE"
,
"TALE"
,
"TALK"
,
"TALL"
,
"TANK"
,
"TASK"
,
"TATE"
,
"TAUT"
,
"TEAL"
,
"TEAM"
,
"TEAR"
,
"TECH"
,
181
"TEEM"
,
"TEEN"
,
"TEET"
,
"TELL"
,
"TEND"
,
"TENT"
,
"TERM"
,
"TERN"
,
"TESS"
,
"TEST"
,
"THAN"
,
"THAT"
,
182
"THEE"
,
"THEM"
,
"THEN"
,
"THEY"
,
"THIN"
,
"THIS"
,
"THUD"
,
"THUG"
,
"TICK"
,
"TIDE"
,
"TIDY"
,
"TIED"
,
183
"TIER"
,
"TILE"
,
"TILL"
,
"TILT"
,
"TIME"
,
"TINA"
,
"TINE"
,
"TINT"
,
"TINY"
,
"TIRE"
,
"TOAD"
,
"TOGO"
,
184
"TOIL"
,
"TOLD"
,
"TOLL"
,
"TONE"
,
"TONG"
,
"TONY"
,
"TOOK"
,
"TOOL"
,
"TOOT"
,
"TORE"
,
"TORN"
,
"TOTE"
,
185
"TOUR"
,
"TOUT"
,
"TOWN"
,
"TRAG"
,
"TRAM"
,
"TRAY"
,
"TREE"
,
"TREK"
,
"TRIG"
,
"TRIM"
,
"TRIO"
,
"TROD"
,
186
"TROT"
,
"TROY"
,
"TRUE"
,
"TUBA"
,
"TUBE"
,
"TUCK"
,
"TUFT"
,
"TUNA"
,
"TUNE"
,
"TUNG"
,
"TURF"
,
"TURN"
,
187
"TUSK"
,
"TWIG"
,
"TWIN"
,
"TWIT"
,
"ULAN"
,
"UNIT"
,
"URGE"
,
"USED"
,
"USER"
,
"USES"
,
"UTAH"
,
"VAIL"
,
188
"VAIN"
,
"VALE"
,
"VARY"
,
"VASE"
,
"VAST"
,
"VEAL"
,
"VEDA"
,
"VEIL"
,
"VEIN"
,
"VEND"
,
"VENT"
,
"VERB"
,
189
"VERY"
,
"VETO"
,
"VICE"
,
"VIEW"
,
"VINE"
,
"VISE"
,
"VOID"
,
"VOLT"
,
"VOTE"
,
"WACK"
,
"WADE"
,
"WAGE"
,
190
"WAIL"
,
"WAIT"
,
"WAKE"
,
"WALE"
,
"WALK"
,
"WALL"
,
"WALT"
,
"WAND"
,
"WANE"
,
"WANG"
,
"WANT"
,
"WARD"
,
191
"WARM"
,
"WARN"
,
"WART"
,
"WASH"
,
"WAST"
,
"WATS"
,
"WATT"
,
"WAVE"
,
"WAVY"
,
"WAYS"
,
"WEAK"
,
"WEAL"
,
192
"WEAN"
,
"WEAR"
,
"WEED"
,
"WEEK"
,
"WEIR"
,
"WELD"
,
"WELL"
,
"WELT"
,
"WENT"
,
"WERE"
,
"WERT"
,
"WEST"
,
193
"WHAM"
,
"WHAT"
,
"WHEE"
,
"WHEN"
,
"WHET"
,
"WHOA"
,
"WHOM"
,
"WICK"
,
"WIFE"
,
"WILD"
,
"WILL"
,
"WIND"
,
194
"WINE"
,
"WING"
,
"WINK"
,
"WINO"
,
"WIRE"
,
"WISE"
,
"WISH"
,
"WITH"
,
"WOLF"
,
"WONT"
,
"WOOD"
,
"WOOL"
,
195
"WORD"
,
"WORE"
,
"WORK"
,
"WORM"
,
"WORN"
,
"WOVE"
,
"WRIT"
,
"WYNN"
,
"YALE"
,
"YANG"
,
"YANK"
,
"YARD"
,
196
"YARN"
,
"YAWL"
,
"YAWN"
,
"YEAH"
,
"YEAR"
,
"YELL"
,
"YOGA"
,
"YOKE"
};
197
198
/* Extract 'length' bits from the char array 's'
199
starting with bit 'start' */
200
unsigned
long
201
RFC1751::extract
(
char
const
* s,
int
start,
int
length)
202
{
203
unsigned
char
cl = 0;
204
unsigned
char
cc = 0;
205
unsigned
char
cr = 0;
206
unsigned
long
x = 0;
207
208
XRPL_ASSERT(length <= 11,
"xrpl::RFC1751::extract : maximum length"
);
209
XRPL_ASSERT(start >= 0,
"xrpl::RFC1751::extract : minimum start"
);
210
XRPL_ASSERT(length >= 0,
"xrpl::RFC1751::extract : minimum length"
);
211
XRPL_ASSERT(start + length <= 66,
"xrpl::RFC1751::extract : maximum start + length"
);
212
213
int
const
shiftR = 24 - (length + (start % 8));
214
cl = s[start / 8];
// get components
215
cc = (shiftR < 16) ? s[(start / 8) + 1] : 0;
216
cr = (shiftR < 8) ? s[(start / 8) + 2] : 0;
217
218
x = ((long)(cl << 8 | cc) << 8 | cr);
// Put bits together
219
x = x >> shiftR;
// Right justify number
220
x = (x & (0xffff >> (16 - length)));
// Trim extra bits.
221
222
return
x;
223
}
224
225
// Encode 8 bytes in 'c' as a string of English words.
226
// Returns a pointer to a static buffer
227
void
228
RFC1751::btoe
(
std::string
& strHuman,
std::string
const
& strData)
229
{
230
char
caBuffer[9];
/* add in room for the parity 2 bits*/
231
int
p = 0, i = 0;
232
233
memcpy(caBuffer, strData.
c_str
(), 8);
234
235
// compute parity: merely add groups of two bits.
236
for
(p = 0, i = 0; i < 64; i += 2)
237
p +=
extract
(caBuffer, i, 2);
238
239
caBuffer[8] = char(p) << 6;
240
241
strHuman =
std::string
() +
dictionary
[
extract
(caBuffer, 0, 11)] +
" "
+
242
dictionary
[
extract
(caBuffer, 11, 11)] +
" "
+
dictionary
[
extract
(caBuffer, 22, 11)] +
" "
+
243
dictionary
[
extract
(caBuffer, 33, 11)] +
" "
+
dictionary
[
extract
(caBuffer, 44, 11)] +
" "
+
244
dictionary
[
extract
(caBuffer, 55, 11)];
245
}
246
247
void
248
RFC1751::insert
(
char
* s,
int
x,
int
start,
int
length)
249
{
250
unsigned
char
cl = 0;
251
unsigned
char
cc = 0;
252
unsigned
char
cr = 0;
253
unsigned
long
y = 0;
254
int
shift = 0;
255
256
XRPL_ASSERT(length <= 11,
"xrpl::RFC1751::insert : maximum length"
);
257
XRPL_ASSERT(start >= 0,
"xrpl::RFC1751::insert : minimum start"
);
258
XRPL_ASSERT(length >= 0,
"xrpl::RFC1751::insert : minimum length"
);
259
XRPL_ASSERT(start + length <= 66,
"xrpl::RFC1751::insert : maximum start + length"
);
260
261
shift = ((8 - ((start + length) % 8)) % 8);
262
y = (long)x << shift;
263
cl = (y >> 16) & 0xff;
264
cc = (y >> 8) & 0xff;
265
cr = y & 0xff;
266
267
if
(shift + length > 16)
268
{
269
s[start / 8] |= cl;
270
s[(start / 8) + 1] |= cc;
271
s[(start / 8) + 2] |= cr;
272
}
273
else
if
(shift + length > 8)
274
{
275
s[start / 8] |= cc;
276
s[(start / 8) + 1] |= cr;
277
}
278
else
279
{
280
s[start / 8] |= cr;
281
}
282
}
283
284
void
285
RFC1751::standard
(
std::string
& strWord)
286
{
287
for
(
auto
& letter : strWord)
288
{
289
if
(islower(
static_cast<
unsigned
char
>
(letter)) != 0)
290
{
291
letter = toupper(
static_cast<
unsigned
char
>
(letter));
292
}
293
else
if
(letter ==
'1'
)
294
{
295
letter =
'L'
;
296
}
297
else
if
(letter ==
'0'
)
298
{
299
letter =
'O'
;
300
}
301
else
if
(letter ==
'5'
)
302
{
303
letter =
'S'
;
304
}
305
}
306
}
307
308
// Binary search of dictionary.
309
int
310
RFC1751::wsrch
(
std::string_view
strWord,
int
iMin,
int
iMax)
311
{
312
int
iResult = -1;
313
314
while
(iResult < 0 && iMin != iMax)
315
{
316
// Have a range to search.
317
int
const
iMid = iMin + ((iMax - iMin) / 2);
318
int
const
iDir = strWord.
compare
(
dictionary
[iMid]);
319
320
if
(iDir == 0)
321
{
322
iResult = iMid;
// Found it.
323
}
324
else
if
(iDir < 0)
325
{
326
iMax = iMid;
// key < middle, middle is new max.
327
}
328
else
329
{
330
iMin = iMid + 1;
// key > middle, new min is past the middle.
331
}
332
}
333
334
return
iResult;
335
}
336
337
// Convert 6 words to binary.
338
//
339
// Returns 1 OK - all good words and parity is OK
340
// 0 word not in data base
341
// -1 badly formed in put ie > 4 char word
342
// -2 words OK but parity is wrong
343
int
344
RFC1751::etob
(
std::string
& strData,
std::vector<std::string>
vsHuman)
345
{
346
if
(6 != vsHuman.
size
())
347
return
-1;
348
349
int
i = 0, p = 0;
350
char
b[9] = {0};
351
352
for
(
auto
& strWord : vsHuman)
353
{
354
int
const
l = strWord.length();
355
356
if
(l > 4 || l < 1)
357
return
-1;
358
359
standard
(strWord);
360
361
auto
v =
wsrch
(strWord, l < 4 ? 0 : 571, l < 4 ? 570 : 2048);
362
363
if
(v < 0)
364
return
0;
365
366
insert
(b, v, p, 11);
367
p += 11;
368
}
369
370
/* now check the parity of what we got */
371
for
(p = 0, i = 0; i < 64; i += 2)
372
p +=
extract
(b, i, 2);
373
374
if
((p & 3) !=
extract
(b, 64, 2))
375
return
-2;
376
377
strData.
assign
(b, 8);
378
379
return
1;
380
}
381
391
int
392
RFC1751::getKeyFromEnglish
(
std::string
& strKey,
std::string
const
& strHuman)
393
{
394
std::vector<std::string>
vWords;
395
std::string
strFirst, strSecond;
396
int
rc = 0;
397
398
std::string
strTrimmed(strHuman);
399
400
strTrimmed =
trimWhitespace
(strTrimmed);
401
402
boost::algorithm::split(
403
vWords, strTrimmed, boost::algorithm::is_space(), boost::algorithm::token_compress_on);
404
405
rc = 12 == vWords.
size
() ? 1 : -1;
406
407
if
(1 == rc)
408
rc =
etob
(strFirst, vWords | boost::adaptors::copied(0, 6));
409
410
if
(1 == rc)
411
rc =
etob
(strSecond, vWords | boost::adaptors::copied(6, 12));
412
413
if
(1 == rc)
414
strKey = strFirst + strSecond;
415
416
return
rc;
417
}
418
422
void
423
RFC1751::getEnglishFromKey
(
std::string
& strHuman,
std::string
const
& strKey)
424
{
425
std::string
strFirst, strSecond;
426
427
btoe
(strFirst, strKey.
substr
(0, 8));
428
btoe
(strSecond, strKey.
substr
(8, 8));
429
430
strHuman = strFirst +
" "
+ strSecond;
431
}
432
433
std::string
434
RFC1751::getWordFromBlob
(
void
const
* blob,
size_t
bytes)
435
{
436
// This is a simple implementation of the Jenkins one-at-a-time hash
437
// algorithm:
438
// http://en.wikipedia.org/wiki/Jenkins_hash_function#one-at-a-time
439
auto
const
* data =
static_cast<
unsigned
char
const*
>
(blob);
440
std::uint32_t
hash = 0;
441
442
for
(
size_t
i = 0; i < bytes; ++i)
443
{
444
hash += data[i];
445
hash += (hash << 10);
446
hash ^= (hash >> 6);
447
}
448
449
hash += (hash << 3);
450
hash ^= (hash >> 11);
451
hash += (hash << 15);
452
453
return
dictionary
[hash % (
sizeof
(
dictionary
) /
sizeof
(
dictionary
[0]))];
454
}
455
456
}
// namespace xrpl
std::string::assign
T assign(T... args)
std::string
std::string_view
std::string::c_str
T c_str(T... args)
cctype
xrpl::RFC1751::wsrch
static int wsrch(std::string_view strWord, int iMin, int iMax)
Definition
RFC1751.cpp:310
xrpl::RFC1751::standard
static void standard(std::string &strWord)
Definition
RFC1751.cpp:285
xrpl::RFC1751::etob
static int etob(std::string &strData, std::vector< std::string > vsHuman)
Definition
RFC1751.cpp:344
xrpl::RFC1751::extract
static unsigned long extract(char const *s, int start, int length)
Definition
RFC1751.cpp:201
xrpl::RFC1751::btoe
static void btoe(std::string &strHuman, std::string const &strData)
Definition
RFC1751.cpp:228
xrpl::RFC1751::getEnglishFromKey
static void getEnglishFromKey(std::string &strHuman, std::string const &strKey)
Convert to human from a 128 bit key in big-endian format.
Definition
RFC1751.cpp:423
xrpl::RFC1751::getKeyFromEnglish
static int getKeyFromEnglish(std::string &strKey, std::string const &strHuman)
Convert words separated by spaces into a 128 bit key in big-endian format.
Definition
RFC1751.cpp:392
xrpl::RFC1751::getWordFromBlob
static std::string getWordFromBlob(void const *blob, size_t bytes)
Chooses a single dictionary word from the data.
Definition
RFC1751.cpp:434
xrpl::RFC1751::dictionary
static char const * dictionary[]
Definition
RFC1751.h:44
xrpl::RFC1751::insert
static void insert(char *s, int x, int start, int length)
Definition
RFC1751.cpp:248
std::string_view::compare
T compare(T... args)
cstddef
cstdint
cstring
std::uint32_t
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::trimWhitespace
std::string trimWhitespace(std::string str)
Remove leading and trailing ASCII whitespace.
Definition
libxrpl/basics/StringUtilities.cpp:119
std::vector::size
T size(T... args)
string
string_view
std::string::substr
T substr(T... args)
vector
Generated by
1.17.0