@abraca/dabra 1.3.1 → 1.3.2
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.
- package/dist/abracadabra-provider.cjs +2382 -14
- package/dist/abracadabra-provider.cjs.map +1 -1
- package/dist/abracadabra-provider.esm.js +2375 -15
- package/dist/abracadabra-provider.esm.js.map +1 -1
- package/dist/index.d.ts +120 -10
- package/package.json +2 -1
- package/src/CryptoIdentityKeystore.ts +263 -15
- package/src/MnemonicKeyDerivation.ts +167 -0
- package/src/index.ts +10 -0
|
@@ -31,6 +31,7 @@ yjs = __toESM(yjs);
|
|
|
31
31
|
let _lifeomic_attempt = require("@lifeomic/attempt");
|
|
32
32
|
let _noble_ed25519 = require("@noble/ed25519");
|
|
33
33
|
_noble_ed25519 = __toESM(_noble_ed25519);
|
|
34
|
+
let _scure_bip39 = require("@scure/bip39");
|
|
34
35
|
|
|
35
36
|
//#region packages/provider/src/awarenessStatesToArray.ts
|
|
36
37
|
const awarenessStatesToArray = (states) => {
|
|
@@ -7120,23 +7121,2202 @@ const ristretto255_oprf = createORPF({
|
|
|
7120
7121
|
hashToScalar: ristretto255_hasher.hashToScalar
|
|
7121
7122
|
});
|
|
7122
7123
|
|
|
7124
|
+
//#endregion
|
|
7125
|
+
//#region node_modules/@scure/bip39/esm/wordlists/english.js
|
|
7126
|
+
const wordlist = `abandon
|
|
7127
|
+
ability
|
|
7128
|
+
able
|
|
7129
|
+
about
|
|
7130
|
+
above
|
|
7131
|
+
absent
|
|
7132
|
+
absorb
|
|
7133
|
+
abstract
|
|
7134
|
+
absurd
|
|
7135
|
+
abuse
|
|
7136
|
+
access
|
|
7137
|
+
accident
|
|
7138
|
+
account
|
|
7139
|
+
accuse
|
|
7140
|
+
achieve
|
|
7141
|
+
acid
|
|
7142
|
+
acoustic
|
|
7143
|
+
acquire
|
|
7144
|
+
across
|
|
7145
|
+
act
|
|
7146
|
+
action
|
|
7147
|
+
actor
|
|
7148
|
+
actress
|
|
7149
|
+
actual
|
|
7150
|
+
adapt
|
|
7151
|
+
add
|
|
7152
|
+
addict
|
|
7153
|
+
address
|
|
7154
|
+
adjust
|
|
7155
|
+
admit
|
|
7156
|
+
adult
|
|
7157
|
+
advance
|
|
7158
|
+
advice
|
|
7159
|
+
aerobic
|
|
7160
|
+
affair
|
|
7161
|
+
afford
|
|
7162
|
+
afraid
|
|
7163
|
+
again
|
|
7164
|
+
age
|
|
7165
|
+
agent
|
|
7166
|
+
agree
|
|
7167
|
+
ahead
|
|
7168
|
+
aim
|
|
7169
|
+
air
|
|
7170
|
+
airport
|
|
7171
|
+
aisle
|
|
7172
|
+
alarm
|
|
7173
|
+
album
|
|
7174
|
+
alcohol
|
|
7175
|
+
alert
|
|
7176
|
+
alien
|
|
7177
|
+
all
|
|
7178
|
+
alley
|
|
7179
|
+
allow
|
|
7180
|
+
almost
|
|
7181
|
+
alone
|
|
7182
|
+
alpha
|
|
7183
|
+
already
|
|
7184
|
+
also
|
|
7185
|
+
alter
|
|
7186
|
+
always
|
|
7187
|
+
amateur
|
|
7188
|
+
amazing
|
|
7189
|
+
among
|
|
7190
|
+
amount
|
|
7191
|
+
amused
|
|
7192
|
+
analyst
|
|
7193
|
+
anchor
|
|
7194
|
+
ancient
|
|
7195
|
+
anger
|
|
7196
|
+
angle
|
|
7197
|
+
angry
|
|
7198
|
+
animal
|
|
7199
|
+
ankle
|
|
7200
|
+
announce
|
|
7201
|
+
annual
|
|
7202
|
+
another
|
|
7203
|
+
answer
|
|
7204
|
+
antenna
|
|
7205
|
+
antique
|
|
7206
|
+
anxiety
|
|
7207
|
+
any
|
|
7208
|
+
apart
|
|
7209
|
+
apology
|
|
7210
|
+
appear
|
|
7211
|
+
apple
|
|
7212
|
+
approve
|
|
7213
|
+
april
|
|
7214
|
+
arch
|
|
7215
|
+
arctic
|
|
7216
|
+
area
|
|
7217
|
+
arena
|
|
7218
|
+
argue
|
|
7219
|
+
arm
|
|
7220
|
+
armed
|
|
7221
|
+
armor
|
|
7222
|
+
army
|
|
7223
|
+
around
|
|
7224
|
+
arrange
|
|
7225
|
+
arrest
|
|
7226
|
+
arrive
|
|
7227
|
+
arrow
|
|
7228
|
+
art
|
|
7229
|
+
artefact
|
|
7230
|
+
artist
|
|
7231
|
+
artwork
|
|
7232
|
+
ask
|
|
7233
|
+
aspect
|
|
7234
|
+
assault
|
|
7235
|
+
asset
|
|
7236
|
+
assist
|
|
7237
|
+
assume
|
|
7238
|
+
asthma
|
|
7239
|
+
athlete
|
|
7240
|
+
atom
|
|
7241
|
+
attack
|
|
7242
|
+
attend
|
|
7243
|
+
attitude
|
|
7244
|
+
attract
|
|
7245
|
+
auction
|
|
7246
|
+
audit
|
|
7247
|
+
august
|
|
7248
|
+
aunt
|
|
7249
|
+
author
|
|
7250
|
+
auto
|
|
7251
|
+
autumn
|
|
7252
|
+
average
|
|
7253
|
+
avocado
|
|
7254
|
+
avoid
|
|
7255
|
+
awake
|
|
7256
|
+
aware
|
|
7257
|
+
away
|
|
7258
|
+
awesome
|
|
7259
|
+
awful
|
|
7260
|
+
awkward
|
|
7261
|
+
axis
|
|
7262
|
+
baby
|
|
7263
|
+
bachelor
|
|
7264
|
+
bacon
|
|
7265
|
+
badge
|
|
7266
|
+
bag
|
|
7267
|
+
balance
|
|
7268
|
+
balcony
|
|
7269
|
+
ball
|
|
7270
|
+
bamboo
|
|
7271
|
+
banana
|
|
7272
|
+
banner
|
|
7273
|
+
bar
|
|
7274
|
+
barely
|
|
7275
|
+
bargain
|
|
7276
|
+
barrel
|
|
7277
|
+
base
|
|
7278
|
+
basic
|
|
7279
|
+
basket
|
|
7280
|
+
battle
|
|
7281
|
+
beach
|
|
7282
|
+
bean
|
|
7283
|
+
beauty
|
|
7284
|
+
because
|
|
7285
|
+
become
|
|
7286
|
+
beef
|
|
7287
|
+
before
|
|
7288
|
+
begin
|
|
7289
|
+
behave
|
|
7290
|
+
behind
|
|
7291
|
+
believe
|
|
7292
|
+
below
|
|
7293
|
+
belt
|
|
7294
|
+
bench
|
|
7295
|
+
benefit
|
|
7296
|
+
best
|
|
7297
|
+
betray
|
|
7298
|
+
better
|
|
7299
|
+
between
|
|
7300
|
+
beyond
|
|
7301
|
+
bicycle
|
|
7302
|
+
bid
|
|
7303
|
+
bike
|
|
7304
|
+
bind
|
|
7305
|
+
biology
|
|
7306
|
+
bird
|
|
7307
|
+
birth
|
|
7308
|
+
bitter
|
|
7309
|
+
black
|
|
7310
|
+
blade
|
|
7311
|
+
blame
|
|
7312
|
+
blanket
|
|
7313
|
+
blast
|
|
7314
|
+
bleak
|
|
7315
|
+
bless
|
|
7316
|
+
blind
|
|
7317
|
+
blood
|
|
7318
|
+
blossom
|
|
7319
|
+
blouse
|
|
7320
|
+
blue
|
|
7321
|
+
blur
|
|
7322
|
+
blush
|
|
7323
|
+
board
|
|
7324
|
+
boat
|
|
7325
|
+
body
|
|
7326
|
+
boil
|
|
7327
|
+
bomb
|
|
7328
|
+
bone
|
|
7329
|
+
bonus
|
|
7330
|
+
book
|
|
7331
|
+
boost
|
|
7332
|
+
border
|
|
7333
|
+
boring
|
|
7334
|
+
borrow
|
|
7335
|
+
boss
|
|
7336
|
+
bottom
|
|
7337
|
+
bounce
|
|
7338
|
+
box
|
|
7339
|
+
boy
|
|
7340
|
+
bracket
|
|
7341
|
+
brain
|
|
7342
|
+
brand
|
|
7343
|
+
brass
|
|
7344
|
+
brave
|
|
7345
|
+
bread
|
|
7346
|
+
breeze
|
|
7347
|
+
brick
|
|
7348
|
+
bridge
|
|
7349
|
+
brief
|
|
7350
|
+
bright
|
|
7351
|
+
bring
|
|
7352
|
+
brisk
|
|
7353
|
+
broccoli
|
|
7354
|
+
broken
|
|
7355
|
+
bronze
|
|
7356
|
+
broom
|
|
7357
|
+
brother
|
|
7358
|
+
brown
|
|
7359
|
+
brush
|
|
7360
|
+
bubble
|
|
7361
|
+
buddy
|
|
7362
|
+
budget
|
|
7363
|
+
buffalo
|
|
7364
|
+
build
|
|
7365
|
+
bulb
|
|
7366
|
+
bulk
|
|
7367
|
+
bullet
|
|
7368
|
+
bundle
|
|
7369
|
+
bunker
|
|
7370
|
+
burden
|
|
7371
|
+
burger
|
|
7372
|
+
burst
|
|
7373
|
+
bus
|
|
7374
|
+
business
|
|
7375
|
+
busy
|
|
7376
|
+
butter
|
|
7377
|
+
buyer
|
|
7378
|
+
buzz
|
|
7379
|
+
cabbage
|
|
7380
|
+
cabin
|
|
7381
|
+
cable
|
|
7382
|
+
cactus
|
|
7383
|
+
cage
|
|
7384
|
+
cake
|
|
7385
|
+
call
|
|
7386
|
+
calm
|
|
7387
|
+
camera
|
|
7388
|
+
camp
|
|
7389
|
+
can
|
|
7390
|
+
canal
|
|
7391
|
+
cancel
|
|
7392
|
+
candy
|
|
7393
|
+
cannon
|
|
7394
|
+
canoe
|
|
7395
|
+
canvas
|
|
7396
|
+
canyon
|
|
7397
|
+
capable
|
|
7398
|
+
capital
|
|
7399
|
+
captain
|
|
7400
|
+
car
|
|
7401
|
+
carbon
|
|
7402
|
+
card
|
|
7403
|
+
cargo
|
|
7404
|
+
carpet
|
|
7405
|
+
carry
|
|
7406
|
+
cart
|
|
7407
|
+
case
|
|
7408
|
+
cash
|
|
7409
|
+
casino
|
|
7410
|
+
castle
|
|
7411
|
+
casual
|
|
7412
|
+
cat
|
|
7413
|
+
catalog
|
|
7414
|
+
catch
|
|
7415
|
+
category
|
|
7416
|
+
cattle
|
|
7417
|
+
caught
|
|
7418
|
+
cause
|
|
7419
|
+
caution
|
|
7420
|
+
cave
|
|
7421
|
+
ceiling
|
|
7422
|
+
celery
|
|
7423
|
+
cement
|
|
7424
|
+
census
|
|
7425
|
+
century
|
|
7426
|
+
cereal
|
|
7427
|
+
certain
|
|
7428
|
+
chair
|
|
7429
|
+
chalk
|
|
7430
|
+
champion
|
|
7431
|
+
change
|
|
7432
|
+
chaos
|
|
7433
|
+
chapter
|
|
7434
|
+
charge
|
|
7435
|
+
chase
|
|
7436
|
+
chat
|
|
7437
|
+
cheap
|
|
7438
|
+
check
|
|
7439
|
+
cheese
|
|
7440
|
+
chef
|
|
7441
|
+
cherry
|
|
7442
|
+
chest
|
|
7443
|
+
chicken
|
|
7444
|
+
chief
|
|
7445
|
+
child
|
|
7446
|
+
chimney
|
|
7447
|
+
choice
|
|
7448
|
+
choose
|
|
7449
|
+
chronic
|
|
7450
|
+
chuckle
|
|
7451
|
+
chunk
|
|
7452
|
+
churn
|
|
7453
|
+
cigar
|
|
7454
|
+
cinnamon
|
|
7455
|
+
circle
|
|
7456
|
+
citizen
|
|
7457
|
+
city
|
|
7458
|
+
civil
|
|
7459
|
+
claim
|
|
7460
|
+
clap
|
|
7461
|
+
clarify
|
|
7462
|
+
claw
|
|
7463
|
+
clay
|
|
7464
|
+
clean
|
|
7465
|
+
clerk
|
|
7466
|
+
clever
|
|
7467
|
+
click
|
|
7468
|
+
client
|
|
7469
|
+
cliff
|
|
7470
|
+
climb
|
|
7471
|
+
clinic
|
|
7472
|
+
clip
|
|
7473
|
+
clock
|
|
7474
|
+
clog
|
|
7475
|
+
close
|
|
7476
|
+
cloth
|
|
7477
|
+
cloud
|
|
7478
|
+
clown
|
|
7479
|
+
club
|
|
7480
|
+
clump
|
|
7481
|
+
cluster
|
|
7482
|
+
clutch
|
|
7483
|
+
coach
|
|
7484
|
+
coast
|
|
7485
|
+
coconut
|
|
7486
|
+
code
|
|
7487
|
+
coffee
|
|
7488
|
+
coil
|
|
7489
|
+
coin
|
|
7490
|
+
collect
|
|
7491
|
+
color
|
|
7492
|
+
column
|
|
7493
|
+
combine
|
|
7494
|
+
come
|
|
7495
|
+
comfort
|
|
7496
|
+
comic
|
|
7497
|
+
common
|
|
7498
|
+
company
|
|
7499
|
+
concert
|
|
7500
|
+
conduct
|
|
7501
|
+
confirm
|
|
7502
|
+
congress
|
|
7503
|
+
connect
|
|
7504
|
+
consider
|
|
7505
|
+
control
|
|
7506
|
+
convince
|
|
7507
|
+
cook
|
|
7508
|
+
cool
|
|
7509
|
+
copper
|
|
7510
|
+
copy
|
|
7511
|
+
coral
|
|
7512
|
+
core
|
|
7513
|
+
corn
|
|
7514
|
+
correct
|
|
7515
|
+
cost
|
|
7516
|
+
cotton
|
|
7517
|
+
couch
|
|
7518
|
+
country
|
|
7519
|
+
couple
|
|
7520
|
+
course
|
|
7521
|
+
cousin
|
|
7522
|
+
cover
|
|
7523
|
+
coyote
|
|
7524
|
+
crack
|
|
7525
|
+
cradle
|
|
7526
|
+
craft
|
|
7527
|
+
cram
|
|
7528
|
+
crane
|
|
7529
|
+
crash
|
|
7530
|
+
crater
|
|
7531
|
+
crawl
|
|
7532
|
+
crazy
|
|
7533
|
+
cream
|
|
7534
|
+
credit
|
|
7535
|
+
creek
|
|
7536
|
+
crew
|
|
7537
|
+
cricket
|
|
7538
|
+
crime
|
|
7539
|
+
crisp
|
|
7540
|
+
critic
|
|
7541
|
+
crop
|
|
7542
|
+
cross
|
|
7543
|
+
crouch
|
|
7544
|
+
crowd
|
|
7545
|
+
crucial
|
|
7546
|
+
cruel
|
|
7547
|
+
cruise
|
|
7548
|
+
crumble
|
|
7549
|
+
crunch
|
|
7550
|
+
crush
|
|
7551
|
+
cry
|
|
7552
|
+
crystal
|
|
7553
|
+
cube
|
|
7554
|
+
culture
|
|
7555
|
+
cup
|
|
7556
|
+
cupboard
|
|
7557
|
+
curious
|
|
7558
|
+
current
|
|
7559
|
+
curtain
|
|
7560
|
+
curve
|
|
7561
|
+
cushion
|
|
7562
|
+
custom
|
|
7563
|
+
cute
|
|
7564
|
+
cycle
|
|
7565
|
+
dad
|
|
7566
|
+
damage
|
|
7567
|
+
damp
|
|
7568
|
+
dance
|
|
7569
|
+
danger
|
|
7570
|
+
daring
|
|
7571
|
+
dash
|
|
7572
|
+
daughter
|
|
7573
|
+
dawn
|
|
7574
|
+
day
|
|
7575
|
+
deal
|
|
7576
|
+
debate
|
|
7577
|
+
debris
|
|
7578
|
+
decade
|
|
7579
|
+
december
|
|
7580
|
+
decide
|
|
7581
|
+
decline
|
|
7582
|
+
decorate
|
|
7583
|
+
decrease
|
|
7584
|
+
deer
|
|
7585
|
+
defense
|
|
7586
|
+
define
|
|
7587
|
+
defy
|
|
7588
|
+
degree
|
|
7589
|
+
delay
|
|
7590
|
+
deliver
|
|
7591
|
+
demand
|
|
7592
|
+
demise
|
|
7593
|
+
denial
|
|
7594
|
+
dentist
|
|
7595
|
+
deny
|
|
7596
|
+
depart
|
|
7597
|
+
depend
|
|
7598
|
+
deposit
|
|
7599
|
+
depth
|
|
7600
|
+
deputy
|
|
7601
|
+
derive
|
|
7602
|
+
describe
|
|
7603
|
+
desert
|
|
7604
|
+
design
|
|
7605
|
+
desk
|
|
7606
|
+
despair
|
|
7607
|
+
destroy
|
|
7608
|
+
detail
|
|
7609
|
+
detect
|
|
7610
|
+
develop
|
|
7611
|
+
device
|
|
7612
|
+
devote
|
|
7613
|
+
diagram
|
|
7614
|
+
dial
|
|
7615
|
+
diamond
|
|
7616
|
+
diary
|
|
7617
|
+
dice
|
|
7618
|
+
diesel
|
|
7619
|
+
diet
|
|
7620
|
+
differ
|
|
7621
|
+
digital
|
|
7622
|
+
dignity
|
|
7623
|
+
dilemma
|
|
7624
|
+
dinner
|
|
7625
|
+
dinosaur
|
|
7626
|
+
direct
|
|
7627
|
+
dirt
|
|
7628
|
+
disagree
|
|
7629
|
+
discover
|
|
7630
|
+
disease
|
|
7631
|
+
dish
|
|
7632
|
+
dismiss
|
|
7633
|
+
disorder
|
|
7634
|
+
display
|
|
7635
|
+
distance
|
|
7636
|
+
divert
|
|
7637
|
+
divide
|
|
7638
|
+
divorce
|
|
7639
|
+
dizzy
|
|
7640
|
+
doctor
|
|
7641
|
+
document
|
|
7642
|
+
dog
|
|
7643
|
+
doll
|
|
7644
|
+
dolphin
|
|
7645
|
+
domain
|
|
7646
|
+
donate
|
|
7647
|
+
donkey
|
|
7648
|
+
donor
|
|
7649
|
+
door
|
|
7650
|
+
dose
|
|
7651
|
+
double
|
|
7652
|
+
dove
|
|
7653
|
+
draft
|
|
7654
|
+
dragon
|
|
7655
|
+
drama
|
|
7656
|
+
drastic
|
|
7657
|
+
draw
|
|
7658
|
+
dream
|
|
7659
|
+
dress
|
|
7660
|
+
drift
|
|
7661
|
+
drill
|
|
7662
|
+
drink
|
|
7663
|
+
drip
|
|
7664
|
+
drive
|
|
7665
|
+
drop
|
|
7666
|
+
drum
|
|
7667
|
+
dry
|
|
7668
|
+
duck
|
|
7669
|
+
dumb
|
|
7670
|
+
dune
|
|
7671
|
+
during
|
|
7672
|
+
dust
|
|
7673
|
+
dutch
|
|
7674
|
+
duty
|
|
7675
|
+
dwarf
|
|
7676
|
+
dynamic
|
|
7677
|
+
eager
|
|
7678
|
+
eagle
|
|
7679
|
+
early
|
|
7680
|
+
earn
|
|
7681
|
+
earth
|
|
7682
|
+
easily
|
|
7683
|
+
east
|
|
7684
|
+
easy
|
|
7685
|
+
echo
|
|
7686
|
+
ecology
|
|
7687
|
+
economy
|
|
7688
|
+
edge
|
|
7689
|
+
edit
|
|
7690
|
+
educate
|
|
7691
|
+
effort
|
|
7692
|
+
egg
|
|
7693
|
+
eight
|
|
7694
|
+
either
|
|
7695
|
+
elbow
|
|
7696
|
+
elder
|
|
7697
|
+
electric
|
|
7698
|
+
elegant
|
|
7699
|
+
element
|
|
7700
|
+
elephant
|
|
7701
|
+
elevator
|
|
7702
|
+
elite
|
|
7703
|
+
else
|
|
7704
|
+
embark
|
|
7705
|
+
embody
|
|
7706
|
+
embrace
|
|
7707
|
+
emerge
|
|
7708
|
+
emotion
|
|
7709
|
+
employ
|
|
7710
|
+
empower
|
|
7711
|
+
empty
|
|
7712
|
+
enable
|
|
7713
|
+
enact
|
|
7714
|
+
end
|
|
7715
|
+
endless
|
|
7716
|
+
endorse
|
|
7717
|
+
enemy
|
|
7718
|
+
energy
|
|
7719
|
+
enforce
|
|
7720
|
+
engage
|
|
7721
|
+
engine
|
|
7722
|
+
enhance
|
|
7723
|
+
enjoy
|
|
7724
|
+
enlist
|
|
7725
|
+
enough
|
|
7726
|
+
enrich
|
|
7727
|
+
enroll
|
|
7728
|
+
ensure
|
|
7729
|
+
enter
|
|
7730
|
+
entire
|
|
7731
|
+
entry
|
|
7732
|
+
envelope
|
|
7733
|
+
episode
|
|
7734
|
+
equal
|
|
7735
|
+
equip
|
|
7736
|
+
era
|
|
7737
|
+
erase
|
|
7738
|
+
erode
|
|
7739
|
+
erosion
|
|
7740
|
+
error
|
|
7741
|
+
erupt
|
|
7742
|
+
escape
|
|
7743
|
+
essay
|
|
7744
|
+
essence
|
|
7745
|
+
estate
|
|
7746
|
+
eternal
|
|
7747
|
+
ethics
|
|
7748
|
+
evidence
|
|
7749
|
+
evil
|
|
7750
|
+
evoke
|
|
7751
|
+
evolve
|
|
7752
|
+
exact
|
|
7753
|
+
example
|
|
7754
|
+
excess
|
|
7755
|
+
exchange
|
|
7756
|
+
excite
|
|
7757
|
+
exclude
|
|
7758
|
+
excuse
|
|
7759
|
+
execute
|
|
7760
|
+
exercise
|
|
7761
|
+
exhaust
|
|
7762
|
+
exhibit
|
|
7763
|
+
exile
|
|
7764
|
+
exist
|
|
7765
|
+
exit
|
|
7766
|
+
exotic
|
|
7767
|
+
expand
|
|
7768
|
+
expect
|
|
7769
|
+
expire
|
|
7770
|
+
explain
|
|
7771
|
+
expose
|
|
7772
|
+
express
|
|
7773
|
+
extend
|
|
7774
|
+
extra
|
|
7775
|
+
eye
|
|
7776
|
+
eyebrow
|
|
7777
|
+
fabric
|
|
7778
|
+
face
|
|
7779
|
+
faculty
|
|
7780
|
+
fade
|
|
7781
|
+
faint
|
|
7782
|
+
faith
|
|
7783
|
+
fall
|
|
7784
|
+
false
|
|
7785
|
+
fame
|
|
7786
|
+
family
|
|
7787
|
+
famous
|
|
7788
|
+
fan
|
|
7789
|
+
fancy
|
|
7790
|
+
fantasy
|
|
7791
|
+
farm
|
|
7792
|
+
fashion
|
|
7793
|
+
fat
|
|
7794
|
+
fatal
|
|
7795
|
+
father
|
|
7796
|
+
fatigue
|
|
7797
|
+
fault
|
|
7798
|
+
favorite
|
|
7799
|
+
feature
|
|
7800
|
+
february
|
|
7801
|
+
federal
|
|
7802
|
+
fee
|
|
7803
|
+
feed
|
|
7804
|
+
feel
|
|
7805
|
+
female
|
|
7806
|
+
fence
|
|
7807
|
+
festival
|
|
7808
|
+
fetch
|
|
7809
|
+
fever
|
|
7810
|
+
few
|
|
7811
|
+
fiber
|
|
7812
|
+
fiction
|
|
7813
|
+
field
|
|
7814
|
+
figure
|
|
7815
|
+
file
|
|
7816
|
+
film
|
|
7817
|
+
filter
|
|
7818
|
+
final
|
|
7819
|
+
find
|
|
7820
|
+
fine
|
|
7821
|
+
finger
|
|
7822
|
+
finish
|
|
7823
|
+
fire
|
|
7824
|
+
firm
|
|
7825
|
+
first
|
|
7826
|
+
fiscal
|
|
7827
|
+
fish
|
|
7828
|
+
fit
|
|
7829
|
+
fitness
|
|
7830
|
+
fix
|
|
7831
|
+
flag
|
|
7832
|
+
flame
|
|
7833
|
+
flash
|
|
7834
|
+
flat
|
|
7835
|
+
flavor
|
|
7836
|
+
flee
|
|
7837
|
+
flight
|
|
7838
|
+
flip
|
|
7839
|
+
float
|
|
7840
|
+
flock
|
|
7841
|
+
floor
|
|
7842
|
+
flower
|
|
7843
|
+
fluid
|
|
7844
|
+
flush
|
|
7845
|
+
fly
|
|
7846
|
+
foam
|
|
7847
|
+
focus
|
|
7848
|
+
fog
|
|
7849
|
+
foil
|
|
7850
|
+
fold
|
|
7851
|
+
follow
|
|
7852
|
+
food
|
|
7853
|
+
foot
|
|
7854
|
+
force
|
|
7855
|
+
forest
|
|
7856
|
+
forget
|
|
7857
|
+
fork
|
|
7858
|
+
fortune
|
|
7859
|
+
forum
|
|
7860
|
+
forward
|
|
7861
|
+
fossil
|
|
7862
|
+
foster
|
|
7863
|
+
found
|
|
7864
|
+
fox
|
|
7865
|
+
fragile
|
|
7866
|
+
frame
|
|
7867
|
+
frequent
|
|
7868
|
+
fresh
|
|
7869
|
+
friend
|
|
7870
|
+
fringe
|
|
7871
|
+
frog
|
|
7872
|
+
front
|
|
7873
|
+
frost
|
|
7874
|
+
frown
|
|
7875
|
+
frozen
|
|
7876
|
+
fruit
|
|
7877
|
+
fuel
|
|
7878
|
+
fun
|
|
7879
|
+
funny
|
|
7880
|
+
furnace
|
|
7881
|
+
fury
|
|
7882
|
+
future
|
|
7883
|
+
gadget
|
|
7884
|
+
gain
|
|
7885
|
+
galaxy
|
|
7886
|
+
gallery
|
|
7887
|
+
game
|
|
7888
|
+
gap
|
|
7889
|
+
garage
|
|
7890
|
+
garbage
|
|
7891
|
+
garden
|
|
7892
|
+
garlic
|
|
7893
|
+
garment
|
|
7894
|
+
gas
|
|
7895
|
+
gasp
|
|
7896
|
+
gate
|
|
7897
|
+
gather
|
|
7898
|
+
gauge
|
|
7899
|
+
gaze
|
|
7900
|
+
general
|
|
7901
|
+
genius
|
|
7902
|
+
genre
|
|
7903
|
+
gentle
|
|
7904
|
+
genuine
|
|
7905
|
+
gesture
|
|
7906
|
+
ghost
|
|
7907
|
+
giant
|
|
7908
|
+
gift
|
|
7909
|
+
giggle
|
|
7910
|
+
ginger
|
|
7911
|
+
giraffe
|
|
7912
|
+
girl
|
|
7913
|
+
give
|
|
7914
|
+
glad
|
|
7915
|
+
glance
|
|
7916
|
+
glare
|
|
7917
|
+
glass
|
|
7918
|
+
glide
|
|
7919
|
+
glimpse
|
|
7920
|
+
globe
|
|
7921
|
+
gloom
|
|
7922
|
+
glory
|
|
7923
|
+
glove
|
|
7924
|
+
glow
|
|
7925
|
+
glue
|
|
7926
|
+
goat
|
|
7927
|
+
goddess
|
|
7928
|
+
gold
|
|
7929
|
+
good
|
|
7930
|
+
goose
|
|
7931
|
+
gorilla
|
|
7932
|
+
gospel
|
|
7933
|
+
gossip
|
|
7934
|
+
govern
|
|
7935
|
+
gown
|
|
7936
|
+
grab
|
|
7937
|
+
grace
|
|
7938
|
+
grain
|
|
7939
|
+
grant
|
|
7940
|
+
grape
|
|
7941
|
+
grass
|
|
7942
|
+
gravity
|
|
7943
|
+
great
|
|
7944
|
+
green
|
|
7945
|
+
grid
|
|
7946
|
+
grief
|
|
7947
|
+
grit
|
|
7948
|
+
grocery
|
|
7949
|
+
group
|
|
7950
|
+
grow
|
|
7951
|
+
grunt
|
|
7952
|
+
guard
|
|
7953
|
+
guess
|
|
7954
|
+
guide
|
|
7955
|
+
guilt
|
|
7956
|
+
guitar
|
|
7957
|
+
gun
|
|
7958
|
+
gym
|
|
7959
|
+
habit
|
|
7960
|
+
hair
|
|
7961
|
+
half
|
|
7962
|
+
hammer
|
|
7963
|
+
hamster
|
|
7964
|
+
hand
|
|
7965
|
+
happy
|
|
7966
|
+
harbor
|
|
7967
|
+
hard
|
|
7968
|
+
harsh
|
|
7969
|
+
harvest
|
|
7970
|
+
hat
|
|
7971
|
+
have
|
|
7972
|
+
hawk
|
|
7973
|
+
hazard
|
|
7974
|
+
head
|
|
7975
|
+
health
|
|
7976
|
+
heart
|
|
7977
|
+
heavy
|
|
7978
|
+
hedgehog
|
|
7979
|
+
height
|
|
7980
|
+
hello
|
|
7981
|
+
helmet
|
|
7982
|
+
help
|
|
7983
|
+
hen
|
|
7984
|
+
hero
|
|
7985
|
+
hidden
|
|
7986
|
+
high
|
|
7987
|
+
hill
|
|
7988
|
+
hint
|
|
7989
|
+
hip
|
|
7990
|
+
hire
|
|
7991
|
+
history
|
|
7992
|
+
hobby
|
|
7993
|
+
hockey
|
|
7994
|
+
hold
|
|
7995
|
+
hole
|
|
7996
|
+
holiday
|
|
7997
|
+
hollow
|
|
7998
|
+
home
|
|
7999
|
+
honey
|
|
8000
|
+
hood
|
|
8001
|
+
hope
|
|
8002
|
+
horn
|
|
8003
|
+
horror
|
|
8004
|
+
horse
|
|
8005
|
+
hospital
|
|
8006
|
+
host
|
|
8007
|
+
hotel
|
|
8008
|
+
hour
|
|
8009
|
+
hover
|
|
8010
|
+
hub
|
|
8011
|
+
huge
|
|
8012
|
+
human
|
|
8013
|
+
humble
|
|
8014
|
+
humor
|
|
8015
|
+
hundred
|
|
8016
|
+
hungry
|
|
8017
|
+
hunt
|
|
8018
|
+
hurdle
|
|
8019
|
+
hurry
|
|
8020
|
+
hurt
|
|
8021
|
+
husband
|
|
8022
|
+
hybrid
|
|
8023
|
+
ice
|
|
8024
|
+
icon
|
|
8025
|
+
idea
|
|
8026
|
+
identify
|
|
8027
|
+
idle
|
|
8028
|
+
ignore
|
|
8029
|
+
ill
|
|
8030
|
+
illegal
|
|
8031
|
+
illness
|
|
8032
|
+
image
|
|
8033
|
+
imitate
|
|
8034
|
+
immense
|
|
8035
|
+
immune
|
|
8036
|
+
impact
|
|
8037
|
+
impose
|
|
8038
|
+
improve
|
|
8039
|
+
impulse
|
|
8040
|
+
inch
|
|
8041
|
+
include
|
|
8042
|
+
income
|
|
8043
|
+
increase
|
|
8044
|
+
index
|
|
8045
|
+
indicate
|
|
8046
|
+
indoor
|
|
8047
|
+
industry
|
|
8048
|
+
infant
|
|
8049
|
+
inflict
|
|
8050
|
+
inform
|
|
8051
|
+
inhale
|
|
8052
|
+
inherit
|
|
8053
|
+
initial
|
|
8054
|
+
inject
|
|
8055
|
+
injury
|
|
8056
|
+
inmate
|
|
8057
|
+
inner
|
|
8058
|
+
innocent
|
|
8059
|
+
input
|
|
8060
|
+
inquiry
|
|
8061
|
+
insane
|
|
8062
|
+
insect
|
|
8063
|
+
inside
|
|
8064
|
+
inspire
|
|
8065
|
+
install
|
|
8066
|
+
intact
|
|
8067
|
+
interest
|
|
8068
|
+
into
|
|
8069
|
+
invest
|
|
8070
|
+
invite
|
|
8071
|
+
involve
|
|
8072
|
+
iron
|
|
8073
|
+
island
|
|
8074
|
+
isolate
|
|
8075
|
+
issue
|
|
8076
|
+
item
|
|
8077
|
+
ivory
|
|
8078
|
+
jacket
|
|
8079
|
+
jaguar
|
|
8080
|
+
jar
|
|
8081
|
+
jazz
|
|
8082
|
+
jealous
|
|
8083
|
+
jeans
|
|
8084
|
+
jelly
|
|
8085
|
+
jewel
|
|
8086
|
+
job
|
|
8087
|
+
join
|
|
8088
|
+
joke
|
|
8089
|
+
journey
|
|
8090
|
+
joy
|
|
8091
|
+
judge
|
|
8092
|
+
juice
|
|
8093
|
+
jump
|
|
8094
|
+
jungle
|
|
8095
|
+
junior
|
|
8096
|
+
junk
|
|
8097
|
+
just
|
|
8098
|
+
kangaroo
|
|
8099
|
+
keen
|
|
8100
|
+
keep
|
|
8101
|
+
ketchup
|
|
8102
|
+
key
|
|
8103
|
+
kick
|
|
8104
|
+
kid
|
|
8105
|
+
kidney
|
|
8106
|
+
kind
|
|
8107
|
+
kingdom
|
|
8108
|
+
kiss
|
|
8109
|
+
kit
|
|
8110
|
+
kitchen
|
|
8111
|
+
kite
|
|
8112
|
+
kitten
|
|
8113
|
+
kiwi
|
|
8114
|
+
knee
|
|
8115
|
+
knife
|
|
8116
|
+
knock
|
|
8117
|
+
know
|
|
8118
|
+
lab
|
|
8119
|
+
label
|
|
8120
|
+
labor
|
|
8121
|
+
ladder
|
|
8122
|
+
lady
|
|
8123
|
+
lake
|
|
8124
|
+
lamp
|
|
8125
|
+
language
|
|
8126
|
+
laptop
|
|
8127
|
+
large
|
|
8128
|
+
later
|
|
8129
|
+
latin
|
|
8130
|
+
laugh
|
|
8131
|
+
laundry
|
|
8132
|
+
lava
|
|
8133
|
+
law
|
|
8134
|
+
lawn
|
|
8135
|
+
lawsuit
|
|
8136
|
+
layer
|
|
8137
|
+
lazy
|
|
8138
|
+
leader
|
|
8139
|
+
leaf
|
|
8140
|
+
learn
|
|
8141
|
+
leave
|
|
8142
|
+
lecture
|
|
8143
|
+
left
|
|
8144
|
+
leg
|
|
8145
|
+
legal
|
|
8146
|
+
legend
|
|
8147
|
+
leisure
|
|
8148
|
+
lemon
|
|
8149
|
+
lend
|
|
8150
|
+
length
|
|
8151
|
+
lens
|
|
8152
|
+
leopard
|
|
8153
|
+
lesson
|
|
8154
|
+
letter
|
|
8155
|
+
level
|
|
8156
|
+
liar
|
|
8157
|
+
liberty
|
|
8158
|
+
library
|
|
8159
|
+
license
|
|
8160
|
+
life
|
|
8161
|
+
lift
|
|
8162
|
+
light
|
|
8163
|
+
like
|
|
8164
|
+
limb
|
|
8165
|
+
limit
|
|
8166
|
+
link
|
|
8167
|
+
lion
|
|
8168
|
+
liquid
|
|
8169
|
+
list
|
|
8170
|
+
little
|
|
8171
|
+
live
|
|
8172
|
+
lizard
|
|
8173
|
+
load
|
|
8174
|
+
loan
|
|
8175
|
+
lobster
|
|
8176
|
+
local
|
|
8177
|
+
lock
|
|
8178
|
+
logic
|
|
8179
|
+
lonely
|
|
8180
|
+
long
|
|
8181
|
+
loop
|
|
8182
|
+
lottery
|
|
8183
|
+
loud
|
|
8184
|
+
lounge
|
|
8185
|
+
love
|
|
8186
|
+
loyal
|
|
8187
|
+
lucky
|
|
8188
|
+
luggage
|
|
8189
|
+
lumber
|
|
8190
|
+
lunar
|
|
8191
|
+
lunch
|
|
8192
|
+
luxury
|
|
8193
|
+
lyrics
|
|
8194
|
+
machine
|
|
8195
|
+
mad
|
|
8196
|
+
magic
|
|
8197
|
+
magnet
|
|
8198
|
+
maid
|
|
8199
|
+
mail
|
|
8200
|
+
main
|
|
8201
|
+
major
|
|
8202
|
+
make
|
|
8203
|
+
mammal
|
|
8204
|
+
man
|
|
8205
|
+
manage
|
|
8206
|
+
mandate
|
|
8207
|
+
mango
|
|
8208
|
+
mansion
|
|
8209
|
+
manual
|
|
8210
|
+
maple
|
|
8211
|
+
marble
|
|
8212
|
+
march
|
|
8213
|
+
margin
|
|
8214
|
+
marine
|
|
8215
|
+
market
|
|
8216
|
+
marriage
|
|
8217
|
+
mask
|
|
8218
|
+
mass
|
|
8219
|
+
master
|
|
8220
|
+
match
|
|
8221
|
+
material
|
|
8222
|
+
math
|
|
8223
|
+
matrix
|
|
8224
|
+
matter
|
|
8225
|
+
maximum
|
|
8226
|
+
maze
|
|
8227
|
+
meadow
|
|
8228
|
+
mean
|
|
8229
|
+
measure
|
|
8230
|
+
meat
|
|
8231
|
+
mechanic
|
|
8232
|
+
medal
|
|
8233
|
+
media
|
|
8234
|
+
melody
|
|
8235
|
+
melt
|
|
8236
|
+
member
|
|
8237
|
+
memory
|
|
8238
|
+
mention
|
|
8239
|
+
menu
|
|
8240
|
+
mercy
|
|
8241
|
+
merge
|
|
8242
|
+
merit
|
|
8243
|
+
merry
|
|
8244
|
+
mesh
|
|
8245
|
+
message
|
|
8246
|
+
metal
|
|
8247
|
+
method
|
|
8248
|
+
middle
|
|
8249
|
+
midnight
|
|
8250
|
+
milk
|
|
8251
|
+
million
|
|
8252
|
+
mimic
|
|
8253
|
+
mind
|
|
8254
|
+
minimum
|
|
8255
|
+
minor
|
|
8256
|
+
minute
|
|
8257
|
+
miracle
|
|
8258
|
+
mirror
|
|
8259
|
+
misery
|
|
8260
|
+
miss
|
|
8261
|
+
mistake
|
|
8262
|
+
mix
|
|
8263
|
+
mixed
|
|
8264
|
+
mixture
|
|
8265
|
+
mobile
|
|
8266
|
+
model
|
|
8267
|
+
modify
|
|
8268
|
+
mom
|
|
8269
|
+
moment
|
|
8270
|
+
monitor
|
|
8271
|
+
monkey
|
|
8272
|
+
monster
|
|
8273
|
+
month
|
|
8274
|
+
moon
|
|
8275
|
+
moral
|
|
8276
|
+
more
|
|
8277
|
+
morning
|
|
8278
|
+
mosquito
|
|
8279
|
+
mother
|
|
8280
|
+
motion
|
|
8281
|
+
motor
|
|
8282
|
+
mountain
|
|
8283
|
+
mouse
|
|
8284
|
+
move
|
|
8285
|
+
movie
|
|
8286
|
+
much
|
|
8287
|
+
muffin
|
|
8288
|
+
mule
|
|
8289
|
+
multiply
|
|
8290
|
+
muscle
|
|
8291
|
+
museum
|
|
8292
|
+
mushroom
|
|
8293
|
+
music
|
|
8294
|
+
must
|
|
8295
|
+
mutual
|
|
8296
|
+
myself
|
|
8297
|
+
mystery
|
|
8298
|
+
myth
|
|
8299
|
+
naive
|
|
8300
|
+
name
|
|
8301
|
+
napkin
|
|
8302
|
+
narrow
|
|
8303
|
+
nasty
|
|
8304
|
+
nation
|
|
8305
|
+
nature
|
|
8306
|
+
near
|
|
8307
|
+
neck
|
|
8308
|
+
need
|
|
8309
|
+
negative
|
|
8310
|
+
neglect
|
|
8311
|
+
neither
|
|
8312
|
+
nephew
|
|
8313
|
+
nerve
|
|
8314
|
+
nest
|
|
8315
|
+
net
|
|
8316
|
+
network
|
|
8317
|
+
neutral
|
|
8318
|
+
never
|
|
8319
|
+
news
|
|
8320
|
+
next
|
|
8321
|
+
nice
|
|
8322
|
+
night
|
|
8323
|
+
noble
|
|
8324
|
+
noise
|
|
8325
|
+
nominee
|
|
8326
|
+
noodle
|
|
8327
|
+
normal
|
|
8328
|
+
north
|
|
8329
|
+
nose
|
|
8330
|
+
notable
|
|
8331
|
+
note
|
|
8332
|
+
nothing
|
|
8333
|
+
notice
|
|
8334
|
+
novel
|
|
8335
|
+
now
|
|
8336
|
+
nuclear
|
|
8337
|
+
number
|
|
8338
|
+
nurse
|
|
8339
|
+
nut
|
|
8340
|
+
oak
|
|
8341
|
+
obey
|
|
8342
|
+
object
|
|
8343
|
+
oblige
|
|
8344
|
+
obscure
|
|
8345
|
+
observe
|
|
8346
|
+
obtain
|
|
8347
|
+
obvious
|
|
8348
|
+
occur
|
|
8349
|
+
ocean
|
|
8350
|
+
october
|
|
8351
|
+
odor
|
|
8352
|
+
off
|
|
8353
|
+
offer
|
|
8354
|
+
office
|
|
8355
|
+
often
|
|
8356
|
+
oil
|
|
8357
|
+
okay
|
|
8358
|
+
old
|
|
8359
|
+
olive
|
|
8360
|
+
olympic
|
|
8361
|
+
omit
|
|
8362
|
+
once
|
|
8363
|
+
one
|
|
8364
|
+
onion
|
|
8365
|
+
online
|
|
8366
|
+
only
|
|
8367
|
+
open
|
|
8368
|
+
opera
|
|
8369
|
+
opinion
|
|
8370
|
+
oppose
|
|
8371
|
+
option
|
|
8372
|
+
orange
|
|
8373
|
+
orbit
|
|
8374
|
+
orchard
|
|
8375
|
+
order
|
|
8376
|
+
ordinary
|
|
8377
|
+
organ
|
|
8378
|
+
orient
|
|
8379
|
+
original
|
|
8380
|
+
orphan
|
|
8381
|
+
ostrich
|
|
8382
|
+
other
|
|
8383
|
+
outdoor
|
|
8384
|
+
outer
|
|
8385
|
+
output
|
|
8386
|
+
outside
|
|
8387
|
+
oval
|
|
8388
|
+
oven
|
|
8389
|
+
over
|
|
8390
|
+
own
|
|
8391
|
+
owner
|
|
8392
|
+
oxygen
|
|
8393
|
+
oyster
|
|
8394
|
+
ozone
|
|
8395
|
+
pact
|
|
8396
|
+
paddle
|
|
8397
|
+
page
|
|
8398
|
+
pair
|
|
8399
|
+
palace
|
|
8400
|
+
palm
|
|
8401
|
+
panda
|
|
8402
|
+
panel
|
|
8403
|
+
panic
|
|
8404
|
+
panther
|
|
8405
|
+
paper
|
|
8406
|
+
parade
|
|
8407
|
+
parent
|
|
8408
|
+
park
|
|
8409
|
+
parrot
|
|
8410
|
+
party
|
|
8411
|
+
pass
|
|
8412
|
+
patch
|
|
8413
|
+
path
|
|
8414
|
+
patient
|
|
8415
|
+
patrol
|
|
8416
|
+
pattern
|
|
8417
|
+
pause
|
|
8418
|
+
pave
|
|
8419
|
+
payment
|
|
8420
|
+
peace
|
|
8421
|
+
peanut
|
|
8422
|
+
pear
|
|
8423
|
+
peasant
|
|
8424
|
+
pelican
|
|
8425
|
+
pen
|
|
8426
|
+
penalty
|
|
8427
|
+
pencil
|
|
8428
|
+
people
|
|
8429
|
+
pepper
|
|
8430
|
+
perfect
|
|
8431
|
+
permit
|
|
8432
|
+
person
|
|
8433
|
+
pet
|
|
8434
|
+
phone
|
|
8435
|
+
photo
|
|
8436
|
+
phrase
|
|
8437
|
+
physical
|
|
8438
|
+
piano
|
|
8439
|
+
picnic
|
|
8440
|
+
picture
|
|
8441
|
+
piece
|
|
8442
|
+
pig
|
|
8443
|
+
pigeon
|
|
8444
|
+
pill
|
|
8445
|
+
pilot
|
|
8446
|
+
pink
|
|
8447
|
+
pioneer
|
|
8448
|
+
pipe
|
|
8449
|
+
pistol
|
|
8450
|
+
pitch
|
|
8451
|
+
pizza
|
|
8452
|
+
place
|
|
8453
|
+
planet
|
|
8454
|
+
plastic
|
|
8455
|
+
plate
|
|
8456
|
+
play
|
|
8457
|
+
please
|
|
8458
|
+
pledge
|
|
8459
|
+
pluck
|
|
8460
|
+
plug
|
|
8461
|
+
plunge
|
|
8462
|
+
poem
|
|
8463
|
+
poet
|
|
8464
|
+
point
|
|
8465
|
+
polar
|
|
8466
|
+
pole
|
|
8467
|
+
police
|
|
8468
|
+
pond
|
|
8469
|
+
pony
|
|
8470
|
+
pool
|
|
8471
|
+
popular
|
|
8472
|
+
portion
|
|
8473
|
+
position
|
|
8474
|
+
possible
|
|
8475
|
+
post
|
|
8476
|
+
potato
|
|
8477
|
+
pottery
|
|
8478
|
+
poverty
|
|
8479
|
+
powder
|
|
8480
|
+
power
|
|
8481
|
+
practice
|
|
8482
|
+
praise
|
|
8483
|
+
predict
|
|
8484
|
+
prefer
|
|
8485
|
+
prepare
|
|
8486
|
+
present
|
|
8487
|
+
pretty
|
|
8488
|
+
prevent
|
|
8489
|
+
price
|
|
8490
|
+
pride
|
|
8491
|
+
primary
|
|
8492
|
+
print
|
|
8493
|
+
priority
|
|
8494
|
+
prison
|
|
8495
|
+
private
|
|
8496
|
+
prize
|
|
8497
|
+
problem
|
|
8498
|
+
process
|
|
8499
|
+
produce
|
|
8500
|
+
profit
|
|
8501
|
+
program
|
|
8502
|
+
project
|
|
8503
|
+
promote
|
|
8504
|
+
proof
|
|
8505
|
+
property
|
|
8506
|
+
prosper
|
|
8507
|
+
protect
|
|
8508
|
+
proud
|
|
8509
|
+
provide
|
|
8510
|
+
public
|
|
8511
|
+
pudding
|
|
8512
|
+
pull
|
|
8513
|
+
pulp
|
|
8514
|
+
pulse
|
|
8515
|
+
pumpkin
|
|
8516
|
+
punch
|
|
8517
|
+
pupil
|
|
8518
|
+
puppy
|
|
8519
|
+
purchase
|
|
8520
|
+
purity
|
|
8521
|
+
purpose
|
|
8522
|
+
purse
|
|
8523
|
+
push
|
|
8524
|
+
put
|
|
8525
|
+
puzzle
|
|
8526
|
+
pyramid
|
|
8527
|
+
quality
|
|
8528
|
+
quantum
|
|
8529
|
+
quarter
|
|
8530
|
+
question
|
|
8531
|
+
quick
|
|
8532
|
+
quit
|
|
8533
|
+
quiz
|
|
8534
|
+
quote
|
|
8535
|
+
rabbit
|
|
8536
|
+
raccoon
|
|
8537
|
+
race
|
|
8538
|
+
rack
|
|
8539
|
+
radar
|
|
8540
|
+
radio
|
|
8541
|
+
rail
|
|
8542
|
+
rain
|
|
8543
|
+
raise
|
|
8544
|
+
rally
|
|
8545
|
+
ramp
|
|
8546
|
+
ranch
|
|
8547
|
+
random
|
|
8548
|
+
range
|
|
8549
|
+
rapid
|
|
8550
|
+
rare
|
|
8551
|
+
rate
|
|
8552
|
+
rather
|
|
8553
|
+
raven
|
|
8554
|
+
raw
|
|
8555
|
+
razor
|
|
8556
|
+
ready
|
|
8557
|
+
real
|
|
8558
|
+
reason
|
|
8559
|
+
rebel
|
|
8560
|
+
rebuild
|
|
8561
|
+
recall
|
|
8562
|
+
receive
|
|
8563
|
+
recipe
|
|
8564
|
+
record
|
|
8565
|
+
recycle
|
|
8566
|
+
reduce
|
|
8567
|
+
reflect
|
|
8568
|
+
reform
|
|
8569
|
+
refuse
|
|
8570
|
+
region
|
|
8571
|
+
regret
|
|
8572
|
+
regular
|
|
8573
|
+
reject
|
|
8574
|
+
relax
|
|
8575
|
+
release
|
|
8576
|
+
relief
|
|
8577
|
+
rely
|
|
8578
|
+
remain
|
|
8579
|
+
remember
|
|
8580
|
+
remind
|
|
8581
|
+
remove
|
|
8582
|
+
render
|
|
8583
|
+
renew
|
|
8584
|
+
rent
|
|
8585
|
+
reopen
|
|
8586
|
+
repair
|
|
8587
|
+
repeat
|
|
8588
|
+
replace
|
|
8589
|
+
report
|
|
8590
|
+
require
|
|
8591
|
+
rescue
|
|
8592
|
+
resemble
|
|
8593
|
+
resist
|
|
8594
|
+
resource
|
|
8595
|
+
response
|
|
8596
|
+
result
|
|
8597
|
+
retire
|
|
8598
|
+
retreat
|
|
8599
|
+
return
|
|
8600
|
+
reunion
|
|
8601
|
+
reveal
|
|
8602
|
+
review
|
|
8603
|
+
reward
|
|
8604
|
+
rhythm
|
|
8605
|
+
rib
|
|
8606
|
+
ribbon
|
|
8607
|
+
rice
|
|
8608
|
+
rich
|
|
8609
|
+
ride
|
|
8610
|
+
ridge
|
|
8611
|
+
rifle
|
|
8612
|
+
right
|
|
8613
|
+
rigid
|
|
8614
|
+
ring
|
|
8615
|
+
riot
|
|
8616
|
+
ripple
|
|
8617
|
+
risk
|
|
8618
|
+
ritual
|
|
8619
|
+
rival
|
|
8620
|
+
river
|
|
8621
|
+
road
|
|
8622
|
+
roast
|
|
8623
|
+
robot
|
|
8624
|
+
robust
|
|
8625
|
+
rocket
|
|
8626
|
+
romance
|
|
8627
|
+
roof
|
|
8628
|
+
rookie
|
|
8629
|
+
room
|
|
8630
|
+
rose
|
|
8631
|
+
rotate
|
|
8632
|
+
rough
|
|
8633
|
+
round
|
|
8634
|
+
route
|
|
8635
|
+
royal
|
|
8636
|
+
rubber
|
|
8637
|
+
rude
|
|
8638
|
+
rug
|
|
8639
|
+
rule
|
|
8640
|
+
run
|
|
8641
|
+
runway
|
|
8642
|
+
rural
|
|
8643
|
+
sad
|
|
8644
|
+
saddle
|
|
8645
|
+
sadness
|
|
8646
|
+
safe
|
|
8647
|
+
sail
|
|
8648
|
+
salad
|
|
8649
|
+
salmon
|
|
8650
|
+
salon
|
|
8651
|
+
salt
|
|
8652
|
+
salute
|
|
8653
|
+
same
|
|
8654
|
+
sample
|
|
8655
|
+
sand
|
|
8656
|
+
satisfy
|
|
8657
|
+
satoshi
|
|
8658
|
+
sauce
|
|
8659
|
+
sausage
|
|
8660
|
+
save
|
|
8661
|
+
say
|
|
8662
|
+
scale
|
|
8663
|
+
scan
|
|
8664
|
+
scare
|
|
8665
|
+
scatter
|
|
8666
|
+
scene
|
|
8667
|
+
scheme
|
|
8668
|
+
school
|
|
8669
|
+
science
|
|
8670
|
+
scissors
|
|
8671
|
+
scorpion
|
|
8672
|
+
scout
|
|
8673
|
+
scrap
|
|
8674
|
+
screen
|
|
8675
|
+
script
|
|
8676
|
+
scrub
|
|
8677
|
+
sea
|
|
8678
|
+
search
|
|
8679
|
+
season
|
|
8680
|
+
seat
|
|
8681
|
+
second
|
|
8682
|
+
secret
|
|
8683
|
+
section
|
|
8684
|
+
security
|
|
8685
|
+
seed
|
|
8686
|
+
seek
|
|
8687
|
+
segment
|
|
8688
|
+
select
|
|
8689
|
+
sell
|
|
8690
|
+
seminar
|
|
8691
|
+
senior
|
|
8692
|
+
sense
|
|
8693
|
+
sentence
|
|
8694
|
+
series
|
|
8695
|
+
service
|
|
8696
|
+
session
|
|
8697
|
+
settle
|
|
8698
|
+
setup
|
|
8699
|
+
seven
|
|
8700
|
+
shadow
|
|
8701
|
+
shaft
|
|
8702
|
+
shallow
|
|
8703
|
+
share
|
|
8704
|
+
shed
|
|
8705
|
+
shell
|
|
8706
|
+
sheriff
|
|
8707
|
+
shield
|
|
8708
|
+
shift
|
|
8709
|
+
shine
|
|
8710
|
+
ship
|
|
8711
|
+
shiver
|
|
8712
|
+
shock
|
|
8713
|
+
shoe
|
|
8714
|
+
shoot
|
|
8715
|
+
shop
|
|
8716
|
+
short
|
|
8717
|
+
shoulder
|
|
8718
|
+
shove
|
|
8719
|
+
shrimp
|
|
8720
|
+
shrug
|
|
8721
|
+
shuffle
|
|
8722
|
+
shy
|
|
8723
|
+
sibling
|
|
8724
|
+
sick
|
|
8725
|
+
side
|
|
8726
|
+
siege
|
|
8727
|
+
sight
|
|
8728
|
+
sign
|
|
8729
|
+
silent
|
|
8730
|
+
silk
|
|
8731
|
+
silly
|
|
8732
|
+
silver
|
|
8733
|
+
similar
|
|
8734
|
+
simple
|
|
8735
|
+
since
|
|
8736
|
+
sing
|
|
8737
|
+
siren
|
|
8738
|
+
sister
|
|
8739
|
+
situate
|
|
8740
|
+
six
|
|
8741
|
+
size
|
|
8742
|
+
skate
|
|
8743
|
+
sketch
|
|
8744
|
+
ski
|
|
8745
|
+
skill
|
|
8746
|
+
skin
|
|
8747
|
+
skirt
|
|
8748
|
+
skull
|
|
8749
|
+
slab
|
|
8750
|
+
slam
|
|
8751
|
+
sleep
|
|
8752
|
+
slender
|
|
8753
|
+
slice
|
|
8754
|
+
slide
|
|
8755
|
+
slight
|
|
8756
|
+
slim
|
|
8757
|
+
slogan
|
|
8758
|
+
slot
|
|
8759
|
+
slow
|
|
8760
|
+
slush
|
|
8761
|
+
small
|
|
8762
|
+
smart
|
|
8763
|
+
smile
|
|
8764
|
+
smoke
|
|
8765
|
+
smooth
|
|
8766
|
+
snack
|
|
8767
|
+
snake
|
|
8768
|
+
snap
|
|
8769
|
+
sniff
|
|
8770
|
+
snow
|
|
8771
|
+
soap
|
|
8772
|
+
soccer
|
|
8773
|
+
social
|
|
8774
|
+
sock
|
|
8775
|
+
soda
|
|
8776
|
+
soft
|
|
8777
|
+
solar
|
|
8778
|
+
soldier
|
|
8779
|
+
solid
|
|
8780
|
+
solution
|
|
8781
|
+
solve
|
|
8782
|
+
someone
|
|
8783
|
+
song
|
|
8784
|
+
soon
|
|
8785
|
+
sorry
|
|
8786
|
+
sort
|
|
8787
|
+
soul
|
|
8788
|
+
sound
|
|
8789
|
+
soup
|
|
8790
|
+
source
|
|
8791
|
+
south
|
|
8792
|
+
space
|
|
8793
|
+
spare
|
|
8794
|
+
spatial
|
|
8795
|
+
spawn
|
|
8796
|
+
speak
|
|
8797
|
+
special
|
|
8798
|
+
speed
|
|
8799
|
+
spell
|
|
8800
|
+
spend
|
|
8801
|
+
sphere
|
|
8802
|
+
spice
|
|
8803
|
+
spider
|
|
8804
|
+
spike
|
|
8805
|
+
spin
|
|
8806
|
+
spirit
|
|
8807
|
+
split
|
|
8808
|
+
spoil
|
|
8809
|
+
sponsor
|
|
8810
|
+
spoon
|
|
8811
|
+
sport
|
|
8812
|
+
spot
|
|
8813
|
+
spray
|
|
8814
|
+
spread
|
|
8815
|
+
spring
|
|
8816
|
+
spy
|
|
8817
|
+
square
|
|
8818
|
+
squeeze
|
|
8819
|
+
squirrel
|
|
8820
|
+
stable
|
|
8821
|
+
stadium
|
|
8822
|
+
staff
|
|
8823
|
+
stage
|
|
8824
|
+
stairs
|
|
8825
|
+
stamp
|
|
8826
|
+
stand
|
|
8827
|
+
start
|
|
8828
|
+
state
|
|
8829
|
+
stay
|
|
8830
|
+
steak
|
|
8831
|
+
steel
|
|
8832
|
+
stem
|
|
8833
|
+
step
|
|
8834
|
+
stereo
|
|
8835
|
+
stick
|
|
8836
|
+
still
|
|
8837
|
+
sting
|
|
8838
|
+
stock
|
|
8839
|
+
stomach
|
|
8840
|
+
stone
|
|
8841
|
+
stool
|
|
8842
|
+
story
|
|
8843
|
+
stove
|
|
8844
|
+
strategy
|
|
8845
|
+
street
|
|
8846
|
+
strike
|
|
8847
|
+
strong
|
|
8848
|
+
struggle
|
|
8849
|
+
student
|
|
8850
|
+
stuff
|
|
8851
|
+
stumble
|
|
8852
|
+
style
|
|
8853
|
+
subject
|
|
8854
|
+
submit
|
|
8855
|
+
subway
|
|
8856
|
+
success
|
|
8857
|
+
such
|
|
8858
|
+
sudden
|
|
8859
|
+
suffer
|
|
8860
|
+
sugar
|
|
8861
|
+
suggest
|
|
8862
|
+
suit
|
|
8863
|
+
summer
|
|
8864
|
+
sun
|
|
8865
|
+
sunny
|
|
8866
|
+
sunset
|
|
8867
|
+
super
|
|
8868
|
+
supply
|
|
8869
|
+
supreme
|
|
8870
|
+
sure
|
|
8871
|
+
surface
|
|
8872
|
+
surge
|
|
8873
|
+
surprise
|
|
8874
|
+
surround
|
|
8875
|
+
survey
|
|
8876
|
+
suspect
|
|
8877
|
+
sustain
|
|
8878
|
+
swallow
|
|
8879
|
+
swamp
|
|
8880
|
+
swap
|
|
8881
|
+
swarm
|
|
8882
|
+
swear
|
|
8883
|
+
sweet
|
|
8884
|
+
swift
|
|
8885
|
+
swim
|
|
8886
|
+
swing
|
|
8887
|
+
switch
|
|
8888
|
+
sword
|
|
8889
|
+
symbol
|
|
8890
|
+
symptom
|
|
8891
|
+
syrup
|
|
8892
|
+
system
|
|
8893
|
+
table
|
|
8894
|
+
tackle
|
|
8895
|
+
tag
|
|
8896
|
+
tail
|
|
8897
|
+
talent
|
|
8898
|
+
talk
|
|
8899
|
+
tank
|
|
8900
|
+
tape
|
|
8901
|
+
target
|
|
8902
|
+
task
|
|
8903
|
+
taste
|
|
8904
|
+
tattoo
|
|
8905
|
+
taxi
|
|
8906
|
+
teach
|
|
8907
|
+
team
|
|
8908
|
+
tell
|
|
8909
|
+
ten
|
|
8910
|
+
tenant
|
|
8911
|
+
tennis
|
|
8912
|
+
tent
|
|
8913
|
+
term
|
|
8914
|
+
test
|
|
8915
|
+
text
|
|
8916
|
+
thank
|
|
8917
|
+
that
|
|
8918
|
+
theme
|
|
8919
|
+
then
|
|
8920
|
+
theory
|
|
8921
|
+
there
|
|
8922
|
+
they
|
|
8923
|
+
thing
|
|
8924
|
+
this
|
|
8925
|
+
thought
|
|
8926
|
+
three
|
|
8927
|
+
thrive
|
|
8928
|
+
throw
|
|
8929
|
+
thumb
|
|
8930
|
+
thunder
|
|
8931
|
+
ticket
|
|
8932
|
+
tide
|
|
8933
|
+
tiger
|
|
8934
|
+
tilt
|
|
8935
|
+
timber
|
|
8936
|
+
time
|
|
8937
|
+
tiny
|
|
8938
|
+
tip
|
|
8939
|
+
tired
|
|
8940
|
+
tissue
|
|
8941
|
+
title
|
|
8942
|
+
toast
|
|
8943
|
+
tobacco
|
|
8944
|
+
today
|
|
8945
|
+
toddler
|
|
8946
|
+
toe
|
|
8947
|
+
together
|
|
8948
|
+
toilet
|
|
8949
|
+
token
|
|
8950
|
+
tomato
|
|
8951
|
+
tomorrow
|
|
8952
|
+
tone
|
|
8953
|
+
tongue
|
|
8954
|
+
tonight
|
|
8955
|
+
tool
|
|
8956
|
+
tooth
|
|
8957
|
+
top
|
|
8958
|
+
topic
|
|
8959
|
+
topple
|
|
8960
|
+
torch
|
|
8961
|
+
tornado
|
|
8962
|
+
tortoise
|
|
8963
|
+
toss
|
|
8964
|
+
total
|
|
8965
|
+
tourist
|
|
8966
|
+
toward
|
|
8967
|
+
tower
|
|
8968
|
+
town
|
|
8969
|
+
toy
|
|
8970
|
+
track
|
|
8971
|
+
trade
|
|
8972
|
+
traffic
|
|
8973
|
+
tragic
|
|
8974
|
+
train
|
|
8975
|
+
transfer
|
|
8976
|
+
trap
|
|
8977
|
+
trash
|
|
8978
|
+
travel
|
|
8979
|
+
tray
|
|
8980
|
+
treat
|
|
8981
|
+
tree
|
|
8982
|
+
trend
|
|
8983
|
+
trial
|
|
8984
|
+
tribe
|
|
8985
|
+
trick
|
|
8986
|
+
trigger
|
|
8987
|
+
trim
|
|
8988
|
+
trip
|
|
8989
|
+
trophy
|
|
8990
|
+
trouble
|
|
8991
|
+
truck
|
|
8992
|
+
true
|
|
8993
|
+
truly
|
|
8994
|
+
trumpet
|
|
8995
|
+
trust
|
|
8996
|
+
truth
|
|
8997
|
+
try
|
|
8998
|
+
tube
|
|
8999
|
+
tuition
|
|
9000
|
+
tumble
|
|
9001
|
+
tuna
|
|
9002
|
+
tunnel
|
|
9003
|
+
turkey
|
|
9004
|
+
turn
|
|
9005
|
+
turtle
|
|
9006
|
+
twelve
|
|
9007
|
+
twenty
|
|
9008
|
+
twice
|
|
9009
|
+
twin
|
|
9010
|
+
twist
|
|
9011
|
+
two
|
|
9012
|
+
type
|
|
9013
|
+
typical
|
|
9014
|
+
ugly
|
|
9015
|
+
umbrella
|
|
9016
|
+
unable
|
|
9017
|
+
unaware
|
|
9018
|
+
uncle
|
|
9019
|
+
uncover
|
|
9020
|
+
under
|
|
9021
|
+
undo
|
|
9022
|
+
unfair
|
|
9023
|
+
unfold
|
|
9024
|
+
unhappy
|
|
9025
|
+
uniform
|
|
9026
|
+
unique
|
|
9027
|
+
unit
|
|
9028
|
+
universe
|
|
9029
|
+
unknown
|
|
9030
|
+
unlock
|
|
9031
|
+
until
|
|
9032
|
+
unusual
|
|
9033
|
+
unveil
|
|
9034
|
+
update
|
|
9035
|
+
upgrade
|
|
9036
|
+
uphold
|
|
9037
|
+
upon
|
|
9038
|
+
upper
|
|
9039
|
+
upset
|
|
9040
|
+
urban
|
|
9041
|
+
urge
|
|
9042
|
+
usage
|
|
9043
|
+
use
|
|
9044
|
+
used
|
|
9045
|
+
useful
|
|
9046
|
+
useless
|
|
9047
|
+
usual
|
|
9048
|
+
utility
|
|
9049
|
+
vacant
|
|
9050
|
+
vacuum
|
|
9051
|
+
vague
|
|
9052
|
+
valid
|
|
9053
|
+
valley
|
|
9054
|
+
valve
|
|
9055
|
+
van
|
|
9056
|
+
vanish
|
|
9057
|
+
vapor
|
|
9058
|
+
various
|
|
9059
|
+
vast
|
|
9060
|
+
vault
|
|
9061
|
+
vehicle
|
|
9062
|
+
velvet
|
|
9063
|
+
vendor
|
|
9064
|
+
venture
|
|
9065
|
+
venue
|
|
9066
|
+
verb
|
|
9067
|
+
verify
|
|
9068
|
+
version
|
|
9069
|
+
very
|
|
9070
|
+
vessel
|
|
9071
|
+
veteran
|
|
9072
|
+
viable
|
|
9073
|
+
vibrant
|
|
9074
|
+
vicious
|
|
9075
|
+
victory
|
|
9076
|
+
video
|
|
9077
|
+
view
|
|
9078
|
+
village
|
|
9079
|
+
vintage
|
|
9080
|
+
violin
|
|
9081
|
+
virtual
|
|
9082
|
+
virus
|
|
9083
|
+
visa
|
|
9084
|
+
visit
|
|
9085
|
+
visual
|
|
9086
|
+
vital
|
|
9087
|
+
vivid
|
|
9088
|
+
vocal
|
|
9089
|
+
voice
|
|
9090
|
+
void
|
|
9091
|
+
volcano
|
|
9092
|
+
volume
|
|
9093
|
+
vote
|
|
9094
|
+
voyage
|
|
9095
|
+
wage
|
|
9096
|
+
wagon
|
|
9097
|
+
wait
|
|
9098
|
+
walk
|
|
9099
|
+
wall
|
|
9100
|
+
walnut
|
|
9101
|
+
want
|
|
9102
|
+
warfare
|
|
9103
|
+
warm
|
|
9104
|
+
warrior
|
|
9105
|
+
wash
|
|
9106
|
+
wasp
|
|
9107
|
+
waste
|
|
9108
|
+
water
|
|
9109
|
+
wave
|
|
9110
|
+
way
|
|
9111
|
+
wealth
|
|
9112
|
+
weapon
|
|
9113
|
+
wear
|
|
9114
|
+
weasel
|
|
9115
|
+
weather
|
|
9116
|
+
web
|
|
9117
|
+
wedding
|
|
9118
|
+
weekend
|
|
9119
|
+
weird
|
|
9120
|
+
welcome
|
|
9121
|
+
west
|
|
9122
|
+
wet
|
|
9123
|
+
whale
|
|
9124
|
+
what
|
|
9125
|
+
wheat
|
|
9126
|
+
wheel
|
|
9127
|
+
when
|
|
9128
|
+
where
|
|
9129
|
+
whip
|
|
9130
|
+
whisper
|
|
9131
|
+
wide
|
|
9132
|
+
width
|
|
9133
|
+
wife
|
|
9134
|
+
wild
|
|
9135
|
+
will
|
|
9136
|
+
win
|
|
9137
|
+
window
|
|
9138
|
+
wine
|
|
9139
|
+
wing
|
|
9140
|
+
wink
|
|
9141
|
+
winner
|
|
9142
|
+
winter
|
|
9143
|
+
wire
|
|
9144
|
+
wisdom
|
|
9145
|
+
wise
|
|
9146
|
+
wish
|
|
9147
|
+
witness
|
|
9148
|
+
wolf
|
|
9149
|
+
woman
|
|
9150
|
+
wonder
|
|
9151
|
+
wood
|
|
9152
|
+
wool
|
|
9153
|
+
word
|
|
9154
|
+
work
|
|
9155
|
+
world
|
|
9156
|
+
worry
|
|
9157
|
+
worth
|
|
9158
|
+
wrap
|
|
9159
|
+
wreck
|
|
9160
|
+
wrestle
|
|
9161
|
+
wrist
|
|
9162
|
+
write
|
|
9163
|
+
wrong
|
|
9164
|
+
yard
|
|
9165
|
+
year
|
|
9166
|
+
yellow
|
|
9167
|
+
you
|
|
9168
|
+
young
|
|
9169
|
+
youth
|
|
9170
|
+
zebra
|
|
9171
|
+
zero
|
|
9172
|
+
zone
|
|
9173
|
+
zoo`.split("\n");
|
|
9174
|
+
|
|
9175
|
+
//#endregion
|
|
9176
|
+
//#region packages/provider/src/MnemonicKeyDerivation.ts
|
|
9177
|
+
/**
|
|
9178
|
+
* MnemonicKeyDerivation
|
|
9179
|
+
*
|
|
9180
|
+
* Pure, stateless functions for BIP-39 mnemonic-based Ed25519 identity
|
|
9181
|
+
* derivation and AES-256-GCM seed wrapping. No IndexedDB, no WebAuthn,
|
|
9182
|
+
* no DOM access — fully unit-testable.
|
|
9183
|
+
*
|
|
9184
|
+
* Derivation chain:
|
|
9185
|
+
* BIP-39 Mnemonic (+optional passphrase)
|
|
9186
|
+
* → PBKDF2-HMAC-SHA512 (2048 rounds, per BIP-39 spec)
|
|
9187
|
+
* → first 32 bytes as IKM
|
|
9188
|
+
* → HKDF-SHA256(salt="abracadabra-mnemonic-v1", info="abracadabra-identity-v1")
|
|
9189
|
+
* → Ed25519 seed (32 bytes)
|
|
9190
|
+
* → Ed25519 keypair + X25519 (Montgomery conversion)
|
|
9191
|
+
*
|
|
9192
|
+
* The HKDF salt differs from the passkey PRF path (which uses PRF_SALT),
|
|
9193
|
+
* providing domain separation: identical raw input bytes can never produce
|
|
9194
|
+
* the same Ed25519 seed across the two derivation methods.
|
|
9195
|
+
*
|
|
9196
|
+
* Dependencies: @scure/bip39, @noble/ed25519, @noble/hashes, @noble/curves
|
|
9197
|
+
*/
|
|
9198
|
+
/** HKDF salt for mnemonic → Ed25519 seed derivation. */
|
|
9199
|
+
const MNEMONIC_HKDF_SALT = /* @__PURE__ */ new TextEncoder().encode("abracadabra-mnemonic-v1");
|
|
9200
|
+
/** HKDF info string — intentionally matches the passkey path's HKDF_INFO. */
|
|
9201
|
+
const MNEMONIC_HKDF_INFO = /* @__PURE__ */ new TextEncoder().encode("abracadabra-identity-v1");
|
|
9202
|
+
/** HKDF info string for deriving the AES-GCM seed-wrapping key from PRF output. */
|
|
9203
|
+
const SEED_WRAP_INFO = /* @__PURE__ */ new TextEncoder().encode("abracadabra-seed-wrap-v1");
|
|
9204
|
+
function toBase64url$1(bytes) {
|
|
9205
|
+
return btoa(String.fromCharCode(...bytes)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
9206
|
+
}
|
|
9207
|
+
/**
|
|
9208
|
+
* Generate a new BIP-39 mnemonic phrase.
|
|
9209
|
+
* @param strength 128 for 12 words (default), 256 for 24 words.
|
|
9210
|
+
*/
|
|
9211
|
+
function generateMnemonic(strength = 128) {
|
|
9212
|
+
return (0, _scure_bip39.generateMnemonic)(wordlist, strength);
|
|
9213
|
+
}
|
|
9214
|
+
/**
|
|
9215
|
+
* Validate a BIP-39 mnemonic (wordlist + checksum).
|
|
9216
|
+
*/
|
|
9217
|
+
function validateMnemonic(mnemonic) {
|
|
9218
|
+
return (0, _scure_bip39.validateMnemonic)(mnemonic, wordlist);
|
|
9219
|
+
}
|
|
9220
|
+
/**
|
|
9221
|
+
* Derive a 32-byte Ed25519 seed from a BIP-39 mnemonic.
|
|
9222
|
+
*
|
|
9223
|
+
* Chain: mnemonic → PBKDF2-HMAC-SHA512 (2048 rounds) → first 32 bytes →
|
|
9224
|
+
* HKDF-SHA256(salt, info) → 32-byte seed.
|
|
9225
|
+
*
|
|
9226
|
+
* @param mnemonic Valid BIP-39 mnemonic (12 or 24 words).
|
|
9227
|
+
* @param passphrase Optional BIP-39 passphrase ("25th word").
|
|
9228
|
+
* @returns 32-byte Ed25519 seed. Caller MUST wipe after use: `seed.fill(0)`.
|
|
9229
|
+
*/
|
|
9230
|
+
function mnemonicToEd25519Seed(mnemonic, passphrase) {
|
|
9231
|
+
const bip39Seed = (0, _scure_bip39.mnemonicToSeedSync)(mnemonic, passphrase ?? "");
|
|
9232
|
+
const seed = hkdf(sha256, bip39Seed.subarray(0, 32), MNEMONIC_HKDF_SALT, MNEMONIC_HKDF_INFO, 32);
|
|
9233
|
+
bip39Seed.fill(0);
|
|
9234
|
+
return seed;
|
|
9235
|
+
}
|
|
9236
|
+
/**
|
|
9237
|
+
* Derive the full Ed25519 + X25519 keypair from a BIP-39 mnemonic.
|
|
9238
|
+
*
|
|
9239
|
+
* @param mnemonic Valid BIP-39 mnemonic.
|
|
9240
|
+
* @param passphrase Optional BIP-39 passphrase.
|
|
9241
|
+
* @returns Keys and seed. Caller MUST wipe `seed` after use.
|
|
9242
|
+
*/
|
|
9243
|
+
async function mnemonicToKeyPair(mnemonic, passphrase) {
|
|
9244
|
+
const seed = mnemonicToEd25519Seed(mnemonic, passphrase);
|
|
9245
|
+
const publicKey = await _noble_ed25519.getPublicKeyAsync(seed);
|
|
9246
|
+
const publicKeyB64 = toBase64url$1(publicKey);
|
|
9247
|
+
const x25519PublicKey = ed25519.utils.toMontgomery(publicKey);
|
|
9248
|
+
return {
|
|
9249
|
+
seed,
|
|
9250
|
+
publicKey,
|
|
9251
|
+
publicKeyB64,
|
|
9252
|
+
x25519PublicKey,
|
|
9253
|
+
x25519PublicKeyB64: toBase64url$1(x25519PublicKey)
|
|
9254
|
+
};
|
|
9255
|
+
}
|
|
9256
|
+
/**
|
|
9257
|
+
* Derive a 32-byte AES-256-GCM key from WebAuthn PRF output for seed wrapping.
|
|
9258
|
+
*
|
|
9259
|
+
* @param prfOutput Raw PRF output from WebAuthn assertion (32 bytes typical).
|
|
9260
|
+
* @param wrapSalt Random 32-byte salt, stored alongside the ciphertext.
|
|
9261
|
+
*/
|
|
9262
|
+
function deriveSeedWrappingKey(prfOutput, wrapSalt) {
|
|
9263
|
+
return hkdf(sha256, new Uint8Array(prfOutput), wrapSalt, SEED_WRAP_INFO, 32);
|
|
9264
|
+
}
|
|
9265
|
+
/**
|
|
9266
|
+
* Encrypt an Ed25519 seed with AES-256-GCM.
|
|
9267
|
+
*
|
|
9268
|
+
* @param seed 32-byte Ed25519 seed to protect.
|
|
9269
|
+
* @param wrappingKeyBytes 32-byte AES key from `deriveSeedWrappingKey`.
|
|
9270
|
+
* @returns Ciphertext (48 bytes: 32 plaintext + 16 auth tag) and 12-byte IV.
|
|
9271
|
+
*/
|
|
9272
|
+
async function wrapSeed(seed, wrappingKeyBytes) {
|
|
9273
|
+
const iv = crypto.getRandomValues(new Uint8Array(12));
|
|
9274
|
+
const key = await crypto.subtle.importKey("raw", wrappingKeyBytes, "AES-GCM", false, ["encrypt"]);
|
|
9275
|
+
return {
|
|
9276
|
+
ciphertext: await crypto.subtle.encrypt({
|
|
9277
|
+
name: "AES-GCM",
|
|
9278
|
+
iv
|
|
9279
|
+
}, key, seed),
|
|
9280
|
+
iv
|
|
9281
|
+
};
|
|
9282
|
+
}
|
|
9283
|
+
/**
|
|
9284
|
+
* Decrypt an Ed25519 seed from AES-256-GCM ciphertext.
|
|
9285
|
+
*
|
|
9286
|
+
* @param ciphertext Encrypted seed (48 bytes).
|
|
9287
|
+
* @param iv 12-byte GCM nonce.
|
|
9288
|
+
* @param wrappingKeyBytes 32-byte AES key from `deriveSeedWrappingKey`.
|
|
9289
|
+
* @returns 32-byte Ed25519 seed. Caller MUST wipe after use.
|
|
9290
|
+
* @throws If the auth tag is invalid (wrong key or tampered data).
|
|
9291
|
+
*/
|
|
9292
|
+
async function unwrapSeed(ciphertext, iv, wrappingKeyBytes) {
|
|
9293
|
+
const key = await crypto.subtle.importKey("raw", wrappingKeyBytes, "AES-GCM", false, ["decrypt"]);
|
|
9294
|
+
const plaintext = await crypto.subtle.decrypt({
|
|
9295
|
+
name: "AES-GCM",
|
|
9296
|
+
iv
|
|
9297
|
+
}, key, ciphertext);
|
|
9298
|
+
return new Uint8Array(plaintext);
|
|
9299
|
+
}
|
|
9300
|
+
|
|
7123
9301
|
//#endregion
|
|
7124
9302
|
//#region packages/provider/src/CryptoIdentityKeystore.ts
|
|
7125
9303
|
/**
|
|
7126
9304
|
* CryptoIdentityKeystore
|
|
7127
9305
|
*
|
|
7128
|
-
*
|
|
7129
|
-
* passkey's PRF extension output. The same passkey on any device produces the
|
|
7130
|
-
* same identity — no private key storage needed.
|
|
9306
|
+
* Ed25519 identity management with two derivation modes:
|
|
7131
9307
|
*
|
|
7132
|
-
*
|
|
7133
|
-
*
|
|
9308
|
+
* 1. **Passkey-only (legacy)**: PRF output → HKDF → Ed25519 seed.
|
|
9309
|
+
* The passkey IS the identity source.
|
|
7134
9310
|
*
|
|
7135
|
-
*
|
|
7136
|
-
*
|
|
7137
|
-
*
|
|
9311
|
+
* 2. **Mnemonic-rooted**: BIP-39 mnemonic → Ed25519 seed, encrypted by
|
|
9312
|
+
* passkey PRF for day-to-day convenience. The mnemonic IS the identity
|
|
9313
|
+
* source; the passkey is a convenience wrapper. Recovery via mnemonic
|
|
9314
|
+
* re-derives the exact same key.
|
|
7138
9315
|
*
|
|
7139
|
-
*
|
|
9316
|
+
* Both modes coexist. IndexedDB records with `encryptedSeed` use mode 2;
|
|
9317
|
+
* records without it use mode 1 (backward compatible).
|
|
9318
|
+
*
|
|
9319
|
+
* Dependencies: @noble/ed25519, @noble/hashes, @noble/curves, @scure/bip39
|
|
7140
9320
|
*/
|
|
7141
9321
|
/**
|
|
7142
9322
|
* Fixed PRF eval salt. Must be constant across all devices so the same synced
|
|
@@ -7192,7 +9372,7 @@ const DB_NAME = "abracadabra:identity";
|
|
|
7192
9372
|
const STORE_NAME = "identity";
|
|
7193
9373
|
function openDb$4() {
|
|
7194
9374
|
return new Promise((resolve, reject) => {
|
|
7195
|
-
const req = indexedDB.open(DB_NAME,
|
|
9375
|
+
const req = indexedDB.open(DB_NAME, 3);
|
|
7196
9376
|
req.onupgradeneeded = () => {
|
|
7197
9377
|
const db = req.result;
|
|
7198
9378
|
if (!db.objectStoreNames.contains(STORE_NAME)) db.createObjectStore(STORE_NAME);
|
|
@@ -7464,6 +9644,169 @@ var CryptoIdentityKeystore = class {
|
|
|
7464
9644
|
}
|
|
7465
9645
|
}
|
|
7466
9646
|
/**
|
|
9647
|
+
* Register a new identity rooted in a BIP-39 mnemonic. Optionally wraps the
|
|
9648
|
+
* derived seed with a passkey for biometric day-to-day access.
|
|
9649
|
+
*
|
|
9650
|
+
* @param username - Display name for the identity.
|
|
9651
|
+
* @param mnemonic - Valid BIP-39 mnemonic (12 or 24 words).
|
|
9652
|
+
* @param passphrase - Optional BIP-39 passphrase ("25th word").
|
|
9653
|
+
* @param rpId - WebAuthn relying party ID (omit to skip passkey wrapping).
|
|
9654
|
+
* @param rpName - WebAuthn relying party display name.
|
|
9655
|
+
* @returns Public keys and optional credential ID.
|
|
9656
|
+
*/
|
|
9657
|
+
async registerWithMnemonic(username, mnemonic, passphrase, rpId, rpName) {
|
|
9658
|
+
const kp = await mnemonicToKeyPair(mnemonic, passphrase);
|
|
9659
|
+
try {
|
|
9660
|
+
if (rpId && rpName) {
|
|
9661
|
+
const credential = await navigator.credentials.create({ publicKey: {
|
|
9662
|
+
challenge: crypto.getRandomValues(new Uint8Array(32)),
|
|
9663
|
+
rp: {
|
|
9664
|
+
id: rpId,
|
|
9665
|
+
name: rpName
|
|
9666
|
+
},
|
|
9667
|
+
user: {
|
|
9668
|
+
id: new TextEncoder().encode(username),
|
|
9669
|
+
name: username,
|
|
9670
|
+
displayName: username
|
|
9671
|
+
},
|
|
9672
|
+
pubKeyCredParams: [{
|
|
9673
|
+
alg: -7,
|
|
9674
|
+
type: "public-key"
|
|
9675
|
+
}, {
|
|
9676
|
+
alg: -257,
|
|
9677
|
+
type: "public-key"
|
|
9678
|
+
}],
|
|
9679
|
+
authenticatorSelection: {
|
|
9680
|
+
residentKey: "required",
|
|
9681
|
+
requireResidentKey: true,
|
|
9682
|
+
userVerification: "required"
|
|
9683
|
+
},
|
|
9684
|
+
extensions: { prf: { eval: { first: PRF_SALT.buffer } } }
|
|
9685
|
+
} });
|
|
9686
|
+
if (!credential) throw new Error("WebAuthn credential creation cancelled");
|
|
9687
|
+
const prfOutput = extractPrfOutput(credential);
|
|
9688
|
+
const wrapSalt = crypto.getRandomValues(new Uint8Array(32));
|
|
9689
|
+
const wrapKey = deriveSeedWrappingKey(prfOutput, wrapSalt);
|
|
9690
|
+
const { ciphertext, iv } = await wrapSeed(kp.seed, wrapKey);
|
|
9691
|
+
wrapKey.fill(0);
|
|
9692
|
+
const credentialIdB64 = toBase64url(new Uint8Array(credential.rawId));
|
|
9693
|
+
const db = await openDb$4();
|
|
9694
|
+
await dbPut(db, credentialIdB64, {
|
|
9695
|
+
username,
|
|
9696
|
+
publicKey: kp.publicKeyB64,
|
|
9697
|
+
credentialId: credential.rawId,
|
|
9698
|
+
encryptedSeed: ciphertext,
|
|
9699
|
+
seedIv: iv,
|
|
9700
|
+
wrapSalt,
|
|
9701
|
+
authMethod: "mnemonic"
|
|
9702
|
+
});
|
|
9703
|
+
db.close();
|
|
9704
|
+
return {
|
|
9705
|
+
publicKey: kp.publicKeyB64,
|
|
9706
|
+
x25519PublicKey: kp.x25519PublicKeyB64,
|
|
9707
|
+
credentialId: credentialIdB64
|
|
9708
|
+
};
|
|
9709
|
+
}
|
|
9710
|
+
return {
|
|
9711
|
+
publicKey: kp.publicKeyB64,
|
|
9712
|
+
x25519PublicKey: kp.x25519PublicKeyB64
|
|
9713
|
+
};
|
|
9714
|
+
} finally {
|
|
9715
|
+
kp.seed.fill(0);
|
|
9716
|
+
}
|
|
9717
|
+
}
|
|
9718
|
+
/**
|
|
9719
|
+
* Wrap an existing mnemonic-derived seed with a new passkey. Use this when
|
|
9720
|
+
* a user logged in via mnemonic and wants to add biometric convenience.
|
|
9721
|
+
*
|
|
9722
|
+
* @param mnemonic - The user's BIP-39 mnemonic.
|
|
9723
|
+
* @param passphrase - Optional BIP-39 passphrase.
|
|
9724
|
+
* @param rpId - WebAuthn relying party ID.
|
|
9725
|
+
* @param rpName - WebAuthn relying party display name.
|
|
9726
|
+
* @returns The new credential ID.
|
|
9727
|
+
*/
|
|
9728
|
+
async wrapSeedWithPasskey(mnemonic, passphrase, rpId, rpName) {
|
|
9729
|
+
const kp = await mnemonicToKeyPair(mnemonic, passphrase);
|
|
9730
|
+
try {
|
|
9731
|
+
const credential = await navigator.credentials.create({ publicKey: {
|
|
9732
|
+
challenge: crypto.getRandomValues(new Uint8Array(32)),
|
|
9733
|
+
rp: {
|
|
9734
|
+
id: rpId,
|
|
9735
|
+
name: rpName
|
|
9736
|
+
},
|
|
9737
|
+
user: {
|
|
9738
|
+
id: fromBase64url(kp.publicKeyB64),
|
|
9739
|
+
name: kp.publicKeyB64.slice(0, 16),
|
|
9740
|
+
displayName: kp.publicKeyB64.slice(0, 16)
|
|
9741
|
+
},
|
|
9742
|
+
pubKeyCredParams: [{
|
|
9743
|
+
alg: -7,
|
|
9744
|
+
type: "public-key"
|
|
9745
|
+
}, {
|
|
9746
|
+
alg: -257,
|
|
9747
|
+
type: "public-key"
|
|
9748
|
+
}],
|
|
9749
|
+
authenticatorSelection: {
|
|
9750
|
+
residentKey: "required",
|
|
9751
|
+
requireResidentKey: true,
|
|
9752
|
+
userVerification: "required"
|
|
9753
|
+
},
|
|
9754
|
+
extensions: { prf: { eval: { first: PRF_SALT.buffer } } }
|
|
9755
|
+
} });
|
|
9756
|
+
if (!credential) throw new Error("WebAuthn credential creation cancelled");
|
|
9757
|
+
const prfOutput = extractPrfOutput(credential);
|
|
9758
|
+
const wrapSalt = crypto.getRandomValues(new Uint8Array(32));
|
|
9759
|
+
const wrapKey = deriveSeedWrappingKey(prfOutput, wrapSalt);
|
|
9760
|
+
const { ciphertext, iv } = await wrapSeed(kp.seed, wrapKey);
|
|
9761
|
+
wrapKey.fill(0);
|
|
9762
|
+
const credentialIdB64 = toBase64url(new Uint8Array(credential.rawId));
|
|
9763
|
+
let username = "";
|
|
9764
|
+
try {
|
|
9765
|
+
const db = await openDb$4();
|
|
9766
|
+
const existing = (await dbGetAll(db)).find((e) => e.value.publicKey === kp.publicKeyB64);
|
|
9767
|
+
if (existing) username = existing.value.username;
|
|
9768
|
+
db.close();
|
|
9769
|
+
} catch {}
|
|
9770
|
+
const db = await openDb$4();
|
|
9771
|
+
await dbPut(db, credentialIdB64, {
|
|
9772
|
+
username,
|
|
9773
|
+
publicKey: kp.publicKeyB64,
|
|
9774
|
+
credentialId: credential.rawId,
|
|
9775
|
+
encryptedSeed: ciphertext,
|
|
9776
|
+
seedIv: iv,
|
|
9777
|
+
wrapSalt,
|
|
9778
|
+
authMethod: "mnemonic"
|
|
9779
|
+
});
|
|
9780
|
+
db.close();
|
|
9781
|
+
return { credentialId: credentialIdB64 };
|
|
9782
|
+
} finally {
|
|
9783
|
+
kp.seed.fill(0);
|
|
9784
|
+
}
|
|
9785
|
+
}
|
|
9786
|
+
/**
|
|
9787
|
+
* Sign a challenge directly with a provided seed. No WebAuthn prompt.
|
|
9788
|
+
* For ephemeral mnemonic sessions where the seed is held in memory.
|
|
9789
|
+
*
|
|
9790
|
+
* The caller manages the seed lifecycle (wiping on session end).
|
|
9791
|
+
*/
|
|
9792
|
+
static async signWithSeed(challengeB64, seed) {
|
|
9793
|
+
const challengeBytes = fromBase64url(challengeB64);
|
|
9794
|
+
return toBase64url(await _noble_ed25519.signAsync(challengeBytes, seed));
|
|
9795
|
+
}
|
|
9796
|
+
/**
|
|
9797
|
+
* Stateless mnemonic sign: derive seed, sign, wipe. No IndexedDB, no WebAuthn.
|
|
9798
|
+
* Useful for CLI or one-shot operations.
|
|
9799
|
+
*/
|
|
9800
|
+
static async signWithMnemonic(mnemonic, challengeB64, passphrase) {
|
|
9801
|
+
const seed = mnemonicToEd25519Seed(mnemonic, passphrase);
|
|
9802
|
+
try {
|
|
9803
|
+
const challengeBytes = fromBase64url(challengeB64);
|
|
9804
|
+
return toBase64url(await _noble_ed25519.signAsync(challengeBytes, seed));
|
|
9805
|
+
} finally {
|
|
9806
|
+
seed.fill(0);
|
|
9807
|
+
}
|
|
9808
|
+
}
|
|
9809
|
+
/**
|
|
7467
9810
|
* Perform a WebAuthn assertion with PRF, derive the Ed25519 seed, and
|
|
7468
9811
|
* update the IndexedDB cache. Returns the seed (caller MUST wipe it).
|
|
7469
9812
|
*/
|
|
@@ -7489,15 +9832,32 @@ var CryptoIdentityKeystore = class {
|
|
|
7489
9832
|
extensions: { prf: { eval: { first: PRF_SALT.buffer } } }
|
|
7490
9833
|
} });
|
|
7491
9834
|
if (!assertion) throw new Error("WebAuthn assertion cancelled");
|
|
7492
|
-
const
|
|
7493
|
-
const publicKeyB64 = toBase64url(await _noble_ed25519.getPublicKeyAsync(seed));
|
|
9835
|
+
const prfOutput = extractPrfOutput(assertion);
|
|
7494
9836
|
const credentialIdB64 = toBase64url(new Uint8Array(assertion.rawId));
|
|
9837
|
+
let stored;
|
|
9838
|
+
try {
|
|
9839
|
+
const db = await openDb$4();
|
|
9840
|
+
stored = await dbGet(db, credentialIdB64);
|
|
9841
|
+
db.close();
|
|
9842
|
+
} catch {}
|
|
9843
|
+
let seed;
|
|
9844
|
+
if (stored?.encryptedSeed && stored.seedIv && stored.wrapSalt) {
|
|
9845
|
+
const wrapKey = deriveSeedWrappingKey(prfOutput, stored.wrapSalt);
|
|
9846
|
+
seed = await unwrapSeed(stored.encryptedSeed, stored.seedIv, wrapKey);
|
|
9847
|
+
wrapKey.fill(0);
|
|
9848
|
+
} else seed = deriveEd25519Seed(prfOutput);
|
|
9849
|
+
const publicKeyB64 = toBase64url(await _noble_ed25519.getPublicKeyAsync(seed));
|
|
7495
9850
|
try {
|
|
7496
9851
|
const db = await openDb$4();
|
|
9852
|
+
const existing = await dbGet(db, credentialIdB64);
|
|
7497
9853
|
await dbPut(db, credentialIdB64, {
|
|
7498
|
-
username:
|
|
9854
|
+
username: existing?.username ?? "",
|
|
7499
9855
|
publicKey: publicKeyB64,
|
|
7500
|
-
credentialId: assertion.rawId
|
|
9856
|
+
credentialId: assertion.rawId,
|
|
9857
|
+
encryptedSeed: existing?.encryptedSeed,
|
|
9858
|
+
seedIv: existing?.seedIv,
|
|
9859
|
+
wrapSalt: existing?.wrapSalt,
|
|
9860
|
+
authMethod: existing?.authMethod
|
|
7501
9861
|
});
|
|
7502
9862
|
db.close();
|
|
7503
9863
|
} catch {}
|
|
@@ -11712,12 +14072,20 @@ exports.WsReadyStates = WsReadyStates;
|
|
|
11712
14072
|
exports.YjsDataChannel = YjsDataChannel;
|
|
11713
14073
|
exports.attachUpdatedAtObserver = attachUpdatedAtObserver;
|
|
11714
14074
|
exports.awarenessStatesToArray = awarenessStatesToArray;
|
|
14075
|
+
exports.bip39Wordlist = wordlist;
|
|
11715
14076
|
exports.decryptField = decryptField;
|
|
11716
14077
|
exports.deriveIdentityDocId = deriveIdentityDocId;
|
|
14078
|
+
exports.deriveSeedWrappingKey = deriveSeedWrappingKey;
|
|
11717
14079
|
exports.encryptField = encryptField;
|
|
14080
|
+
exports.generateMnemonic = generateMnemonic;
|
|
11718
14081
|
exports.makeEncryptedYMap = makeEncryptedYMap;
|
|
11719
14082
|
exports.makeEncryptedYText = makeEncryptedYText;
|
|
14083
|
+
exports.mnemonicToEd25519Seed = mnemonicToEd25519Seed;
|
|
14084
|
+
exports.mnemonicToKeyPair = mnemonicToKeyPair;
|
|
11720
14085
|
exports.readAuthMessage = readAuthMessage;
|
|
14086
|
+
exports.unwrapSeed = unwrapSeed;
|
|
14087
|
+
exports.validateMnemonic = validateMnemonic;
|
|
14088
|
+
exports.wrapSeed = wrapSeed;
|
|
11721
14089
|
exports.writeAuthenticated = writeAuthenticated;
|
|
11722
14090
|
exports.writeAuthentication = writeAuthentication;
|
|
11723
14091
|
exports.writePermissionDenied = writePermissionDenied;
|