├── .travis.yml
├── LICENSE
├── README.md
├── misc
└── license_header.txt
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── github
│ │ └── orogvany
│ │ ├── bip32
│ │ ├── Network.java
│ │ ├── crypto
│ │ │ ├── BitUtil.java
│ │ │ ├── Hash.java
│ │ │ ├── HdUtil.java
│ │ │ ├── HmacSha512.java
│ │ │ └── Secp256k1.java
│ │ ├── exception
│ │ │ └── CryptoException.java
│ │ ├── extern
│ │ │ └── Hex.java
│ │ └── wallet
│ │ │ ├── Bip44.java
│ │ │ ├── CoinType.java
│ │ │ ├── HdAddress.java
│ │ │ ├── HdKeyGenerator.java
│ │ │ └── key
│ │ │ ├── Curve.java
│ │ │ ├── HdKey.java
│ │ │ ├── HdPrivateKey.java
│ │ │ └── HdPublicKey.java
│ │ └── bip39
│ │ ├── Dictionary.java
│ │ ├── Language.java
│ │ └── MnemonicGenerator.java
└── resources
│ └── wordlists
│ ├── english.txt
│ ├── french.txt
│ ├── italian.txt
│ ├── japanese.txt
│ ├── korean.txt
│ └── spanish.txt
└── test
├── java
└── com
│ └── github
│ └── orogvany
│ ├── bip32
│ ├── Base58.java
│ ├── BaseVectorTest.java
│ ├── Bip44Test.java
│ ├── BitUtilTest.java
│ ├── PublicKeyChainTest.java
│ ├── SlipVectorOneTest.java
│ ├── VectorOneTest.java
│ ├── VectorThreeTest.java
│ └── VectorTwoTest.java
│ └── bip39
│ ├── MnemonicGeneratorTest.java
│ ├── Vector.java
│ ├── VectorReader.java
│ └── VectorTest.java
└── resources
└── vector
└── vector.json
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: java
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BIP32-Ed25519-java
2 |
3 | [](https://travis-ci.org/orogvany/BIP32-Ed25519-java)
4 |
5 |
6 | BIP32-Ed25519 HD wallets for java
7 |
8 | Hierarchical Deterministic wallets are a boon to bitcoin, as it solves a problem of backups and allows for much needed functionality.
9 | However, it is fairly specific to secp256k1.
10 |
11 | This project implements BIP-32 extending it with compatibility for Ed25519
12 |
13 | Current state:
14 | * BIP-32 implemented, Ed25519 works for SLIP-0100
15 | * Not using https://cardanolaunch.com/assets/Ed25519_BIP.pdf, decided on using SLIP-0010 due to ease of implementation and test vectors supplied.
16 | * BIP-44 (Paths for HD keys)
17 | * BIP-39 (Mnemonic keys)
18 |
19 | ## Compiling
20 | ```
21 | mvn clean install
22 | ```
23 |
24 | For maven use you can use jitpack
25 |
26 | ```
27 |
28 | com.github.orogvany
29 | BIP32-Ed25519-java
30 | {latest checkin hash}
31 |
32 | ```
33 |
34 | Jitpack repo
35 |
36 | ```
37 |
38 |
39 | jitpack.io
40 | https://jitpack.io
41 |
42 |
43 | ```
44 |
--------------------------------------------------------------------------------
/misc/license_header.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2018 orogvany
2 |
3 | Distributed under the MIT software license, see the accompanying file
4 | LICENSE or https://opensource.org/licenses/mit-license.php
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | com.github.orogvany
5 | bip32-ed25519-java
6 | 1.0.0-SNAPSHOT
7 | jar
8 | BIP32 for java with Ed25519 extensions
9 |
10 |
11 | Orogvany
12 | https://github.com/orogvany/BIP32-Ed25519-java
13 |
14 |
15 |
16 |
17 | MIT License
18 | https://opensource.org/licenses/MIT
19 | repo
20 |
21 |
22 |
23 |
24 |
25 | bintray
26 | https://dl.bintray.com/terl/lazysodium-maven
27 |
28 |
29 |
30 |
31 |
32 |
33 | org.slf4j
34 | slf4j-api
35 | 1.7.25
36 | true
37 |
38 |
39 | ch.qos.logback
40 | logback-core
41 | 1.2.3
42 | true
43 |
44 |
45 | ch.qos.logback
46 | logback-classic
47 | 1.2.3
48 | true
49 |
50 |
51 | org.bouncycastle
52 | bcprov-jdk15on
53 | 1.60
54 | true
55 |
56 |
57 | org.apache.commons
58 | commons-lang3
59 | 3.7
60 | true
61 |
62 |
63 | net.i2p.crypto
64 | eddsa
65 | 0.3.0
66 | true
67 |
68 |
69 | junit
70 | junit
71 | 4.12
72 | test
73 |
74 |
75 | com.fasterxml.jackson.core
76 | jackson-core
77 | 2.9.5
78 | test
79 |
80 |
81 | com.fasterxml.jackson.core
82 | jackson-databind
83 | 2.9.5
84 | test
85 |
86 |
87 |
88 |
89 |
90 |
91 | org.apache.maven.plugins
92 | maven-compiler-plugin
93 | 3.7.0
94 |
95 | 1.8
96 | 1.8
97 |
98 |
99 |
100 |
101 | com.mycila
102 | license-maven-plugin
103 | 3.0
104 |
105 |
106 | UTF-8
107 |
108 | src/main/**/*.java
109 | src/test/**/*.java
110 |
111 |
112 |
113 |
114 |
115 |
116 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/Network.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.extern.Hex;
10 |
11 | /**
12 | * Defined network values for key generation
13 | */
14 | public enum Network {
15 | mainnet("0x0488ADE4", "0x0488B21E"),
16 | testnet("0x04358394", "0x043587CF");
17 |
18 | private final byte[] privatePrefix;
19 | private final byte[] publicPrefix;
20 |
21 | Network(String privatePrefix, String publicPrefix) {
22 | this.privatePrefix = Hex.decode0x(privatePrefix);
23 | this.publicPrefix = Hex.decode0x(publicPrefix);
24 | }
25 |
26 | public byte[] getPrivateKeyVersion() {
27 | return privatePrefix;
28 | }
29 |
30 | public byte[] getPublicKeyVersion() {
31 | return publicPrefix;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/crypto/BitUtil.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.crypto;
8 |
9 | public class BitUtil {
10 |
11 | /**
12 | * Checks bit value from the left, 1 based
13 | *
14 | * @param data data
15 | * @param index index to check
16 | * @return true if set
17 | */
18 | public static boolean checkBit(byte data, int index) {
19 | byte bit = (byte) ((data >> (8 - index)) & 1);
20 | return bit == 0x1;
21 | }
22 |
23 | /**
24 | * Set a bit of a byte
25 | *
26 | * @param data data
27 | * @param index index to set
28 | * @return byte with bit set
29 | */
30 | public static byte setBit(byte data, int index) {
31 | data |= 1 << (8 - index);
32 | return data;
33 | }
34 |
35 | /**
36 | * Unset a bit of a byte
37 | *
38 | * @param data data
39 | * @param index index to clear
40 | * @return byte with bit unset
41 | */
42 | public static byte unsetBit(byte data, int index) {
43 | data &= ~(1 << (8 - index));
44 | return data;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/crypto/Hash.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.crypto;
8 |
9 | import com.github.orogvany.bip32.exception.CryptoException;
10 | import org.bouncycastle.crypto.digests.RIPEMD160Digest;
11 |
12 | import java.security.MessageDigest;
13 | import java.security.NoSuchAlgorithmException;
14 |
15 | /**
16 | * Basic hash functions
17 | */
18 | public class Hash {
19 |
20 | /**
21 | * SHA-256
22 | *
23 | * @param input input
24 | * @return sha256(input)
25 | */
26 | public static byte[] sha256(byte[] input) {
27 | try {
28 | MessageDigest digest = MessageDigest.getInstance("SHA-256");
29 | return digest.digest(input);
30 | } catch (NoSuchAlgorithmException e) {
31 | throw new CryptoException("Unable to find SHA-256", e);
32 | }
33 | }
34 |
35 | /**
36 | * SHA-512
37 | *
38 | * @param input input
39 | * @return sha512(input)
40 | */
41 | public static byte[] sha512(byte[] input) {
42 | try {
43 | MessageDigest digest = MessageDigest.getInstance("SHA-512");
44 | return digest.digest(input);
45 | } catch (NoSuchAlgorithmException e) {
46 | throw new CryptoException("Unable to find SHA-512", e);
47 | }
48 | }
49 |
50 | /**
51 | * sha256(sha256(bytes))
52 | *
53 | * @param bytes input
54 | * @return sha'd twice result
55 | */
56 | public static byte[] sha256Twice(byte[] bytes) {
57 | return sha256Twice(bytes, 0, bytes.length);
58 | }
59 |
60 | public static byte[] sha256Twice(final byte[] bytes, final int offset, final int length) {
61 | try {
62 | MessageDigest digest = MessageDigest.getInstance("SHA-256");
63 | digest.update(bytes, offset, length);
64 | digest.update(digest.digest());
65 | return digest.digest();
66 | } catch (NoSuchAlgorithmException e) {
67 | throw new CryptoException("Unable to find SHA-256", e);
68 | }
69 | }
70 |
71 | /**
72 | * H160
73 | *
74 | * @param input input
75 | * @return h160(input)
76 | */
77 | public static byte[] h160(byte[] input) {
78 | byte[] sha256 = sha256(input);
79 |
80 | RIPEMD160Digest digest = new RIPEMD160Digest();
81 | digest.update(sha256, 0, sha256.length);
82 | byte[] out = new byte[20];
83 | digest.doFinal(out, 0);
84 | return out;
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/crypto/HdUtil.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.crypto;
8 |
9 | import org.apache.commons.lang3.ArrayUtils;
10 |
11 | import java.math.BigInteger;
12 | import java.util.Arrays;
13 |
14 | /**
15 | * General Util class for defined functions.
16 | */
17 | public class HdUtil {
18 |
19 | /**
20 | * ser32(i): serialize a 32-bit unsigned integer i as a 4-byte sequence,
21 | * most significant byte first.
22 | *
23 | * Prefer long type to hold unsigned ints.
24 | *
25 | * @return ser32(i)
26 | */
27 | public static byte[] ser32(long i) {
28 |
29 | byte[] ser = new byte[4];
30 | ser[0] = (byte) (i >> 24);
31 | ser[1] = (byte) (i >> 16);
32 | ser[2] = (byte) (i >> 8);
33 | ser[3] = (byte) (i);
34 | return ser;
35 | }
36 |
37 | /**
38 | * ser256(p): serializes the integer p as a 32-byte sequence, most
39 | * significant byte first.
40 | *
41 | * @param p big integer
42 | * @return 32 byte sequence
43 | */
44 | public static byte[] ser256(BigInteger p) {
45 | byte[] byteArray = p.toByteArray();
46 | byte[] ret = new byte[32];
47 |
48 | //0 fill value
49 | Arrays.fill(ret, (byte) 0);
50 |
51 | //copy the bigint in
52 | if (byteArray.length <= ret.length) {
53 | System.arraycopy(byteArray, 0, ret, ret.length - byteArray.length, byteArray.length);
54 | } else {
55 | System.arraycopy(byteArray, byteArray.length - ret.length, ret, 0, ret.length);
56 | }
57 |
58 | return ret;
59 | }
60 |
61 | /**
62 | * ser256(p): serializes the integer p as a 32-byte sequence, least
63 | * significant byte first.
64 | *
65 | * @param p big integer
66 | * @return 32 byte sequence
67 | */
68 | public static byte[] ser256LE(BigInteger p) {
69 |
70 | byte[] byteArray = p.toByteArray();
71 | ArrayUtils.reverse(byteArray);
72 |
73 | byte[] ret = new byte[32];
74 |
75 | //0 fill value
76 | Arrays.fill(ret, (byte) 0);
77 |
78 | //copy the bigint in
79 | if (byteArray.length <= ret.length) {
80 | System.arraycopy(byteArray, 0, ret, ret.length - byteArray.length, byteArray.length);
81 | } else {
82 | System.arraycopy(byteArray, byteArray.length - ret.length, ret, 0, ret.length);
83 | }
84 |
85 | return ret;
86 | }
87 |
88 | /**
89 | * parse256(p): interprets a 32-byte sequence as a 256-bit number, most
90 | * significant byte first.
91 | *
92 | * @param p bytes
93 | * @return 256 bit number
94 | */
95 | public static BigInteger parse256(byte[] p) {
96 | return new BigInteger(1, p);
97 | }
98 |
99 | /**
100 | * parse256LE(p): interprets a 32-byte sequence as a 256-bit number, least
101 | * significant byte first
102 | *
103 | * @param p bytes
104 | * @return 256 bit number
105 | */
106 | public static BigInteger parse256LE(byte[] p) {
107 | byte[] copy = ArrayUtils.clone(p);
108 | ArrayUtils.reverse(copy);
109 |
110 | return new BigInteger(1, copy);
111 | }
112 |
113 | /**
114 | * Append two byte arrays
115 | *
116 | * @param a first byte array
117 | * @param b second byte array
118 | * @return bytes appended
119 | */
120 | public static byte[] append(byte[] a, byte[] b) {
121 | byte[] c = new byte[a.length + b.length];
122 | System.arraycopy(a, 0, c, 0, a.length);
123 | System.arraycopy(b, 0, c, a.length, b.length);
124 | return c;
125 | }
126 |
127 | /**
128 | * Get the fingerprint
129 | *
130 | * @param keyData key data
131 | * @return fingerprint
132 | */
133 | public static byte[] getFingerprint(byte[] keyData) {
134 | byte[] point = Secp256k1.serP(Secp256k1.point(HdUtil.parse256(keyData)));
135 | byte[] h160 = Hash.h160(point);
136 | return new byte[]{h160[0], h160[1], h160[2], h160[3]};
137 | }
138 |
139 | public static byte[] ser32LE(long i) {
140 | byte[] ser = new byte[4];
141 | ser[3] = (byte) (i >> 24);
142 | ser[2] = (byte) (i >> 16);
143 | ser[1] = (byte) (i >> 8);
144 | ser[0] = (byte) (i);
145 | return ser;
146 | }
147 | }
148 |
149 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/crypto/HmacSha512.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.crypto;
8 |
9 | import com.github.orogvany.bip32.exception.CryptoException;
10 |
11 | import javax.crypto.Mac;
12 | import javax.crypto.spec.SecretKeySpec;
13 | import java.security.InvalidKeyException;
14 | import java.security.NoSuchAlgorithmException;
15 |
16 | /**
17 | * Utility class for Hmac SHA-512
18 | */
19 | public class HmacSha512 {
20 |
21 | private static final String HMAC_SHA512 = "HmacSHA512";
22 |
23 | /**
24 | * hmac512
25 | *
26 | * @param key key
27 | * @param seed seed
28 | * @return hmac512
29 | */
30 | public static byte[] hmac512(byte[] key, byte[] seed) {
31 | try {
32 | Mac sha512_HMAC = Mac.getInstance(HMAC_SHA512);
33 | SecretKeySpec keySpec = new SecretKeySpec(seed, HMAC_SHA512);
34 | sha512_HMAC.init(keySpec);
35 | return sha512_HMAC.doFinal(key);
36 | } catch (NoSuchAlgorithmException | InvalidKeyException e) {
37 | throw new CryptoException("Unable to perform hmac512.", e);
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/crypto/Secp256k1.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.crypto;
8 |
9 | import org.bouncycastle.asn1.x9.X9ECParameters;
10 | import org.bouncycastle.crypto.ec.CustomNamedCurves;
11 | import org.bouncycastle.math.ec.ECPoint;
12 |
13 | import java.math.BigInteger;
14 |
15 | public class Secp256k1 {
16 | static final X9ECParameters SECP = CustomNamedCurves.getByName("secp256k1");
17 |
18 | /**
19 | * serP(P): serializes the coordinate pair P = (x,y) as a byte sequence using
20 | * SEC1's compressed form: (0x02 or 0x03) || ser256(x), where the header byte
21 | * depends on the parity of the omitted y coordinate.
22 | *
23 | * @param p point
24 | * @return serialized point
25 | */
26 | public static byte[] serP(ECPoint p) {
27 | return p.getEncoded(true);
28 | }
29 |
30 | public static ECPoint deserP(byte[] p)
31 | {
32 | return SECP.getCurve().decodePoint(p);
33 | }
34 | /**
35 | * point(p): returns the coordinate pair resulting from EC point multiplication
36 | * (repeated application of the EC group operation) of the secp256k1 base point
37 | * with the integer p.
38 | *
39 | * @param p input
40 | * @return point
41 | */
42 | public static ECPoint point(BigInteger p) {
43 | return SECP.getG().multiply(p);
44 | }
45 |
46 | /**
47 | * get curve N
48 | *
49 | * @return N
50 | */
51 | public static BigInteger getN() {
52 | return SECP.getN();
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/exception/CryptoException.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.exception;
8 |
9 | /**
10 | * General exception for crypto operations
11 | */
12 | public class CryptoException extends RuntimeException {
13 |
14 | public CryptoException(String message) {
15 | super(message);
16 | }
17 |
18 | public CryptoException(String message, Throwable cause) {
19 | super(message, cause);
20 | }
21 |
22 | public CryptoException(Throwable cause) {
23 | super(cause);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/extern/Hex.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2017-2018 The Semux Developers
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.extern;
8 |
9 | import com.github.orogvany.bip32.exception.CryptoException;
10 |
11 | /**
12 | * Hex utility
13 | */
14 | public class Hex {
15 |
16 | public static final String PREF = "0x";
17 |
18 | private static final char[] intToHex = "0123456789abcdef".toCharArray();
19 | private static final int[] hexToInt = new int[128];
20 | static {
21 | for (byte i = 0; i < 16; i++) {
22 | if (i < 10) {
23 | hexToInt['0' + i] = i;
24 | } else {
25 | hexToInt['a' + i - 10] = i;
26 | hexToInt['A' + i - 10] = i;
27 | }
28 | }
29 | }
30 |
31 | private Hex() {
32 | }
33 |
34 | /**
35 | * Encodes a byte array into a hex string.
36 | *
37 | * @param raw
38 | * @return
39 | */
40 | public static String encode(byte[] raw) {
41 | char[] hex = new char[raw.length * 2];
42 |
43 | for (int i = 0; i < raw.length; i++) {
44 | hex[i * 2] = intToHex[(raw[i] & 0xF0) >> 4];
45 | hex[i * 2 + 1] = intToHex[raw[i] & 0x0F];
46 | }
47 |
48 | return new String(hex);
49 | }
50 |
51 | /**
52 | * Encodes a byte array into hex string.
53 | *
54 | * @param raw
55 | * @return the hex encoding with 0x prefix
56 | */
57 | public static String encode0x(byte[] raw) {
58 | return Hex.PREF + encode(raw);
59 | }
60 |
61 | /**
62 | * Decode a hex encoded byte array.
63 | *
64 | * @param hex
65 | * @throws CryptoException
66 | * if the input is not a valid hex string
67 | * @return
68 | */
69 | public static byte[] decode(String hex) throws CryptoException {
70 | if (hex == null || !hex.matches("([0-9a-fA-F]{2})*")) {
71 | throw new CryptoException("Invalid hex string");
72 | }
73 |
74 | byte[] raw = new byte[hex.length() / 2];
75 |
76 | char[] chars = hex.toCharArray();
77 | for (int i = 0; i < chars.length; i += 2) {
78 | raw[i / 2] = (byte) ((hexToInt[chars[i]] << 4) + hexToInt[chars[i + 1]]);
79 | }
80 |
81 | return raw;
82 | }
83 |
84 | /**
85 | * Decodes a hex encoded byte array.
86 | *
87 | * This method will automatically detect the '0x' prefix.
88 | *
89 | * @param hex
90 | * @throws CryptoException
91 | * if the input is not a valid hex string
92 | * @return
93 | */
94 | public static byte[] decode0x(String hex) throws CryptoException {
95 | if (hex != null && hex.startsWith(Hex.PREF)) {
96 | return decode(hex.substring(2));
97 | } else {
98 | return decode(hex);
99 | }
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/wallet/Bip44.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.wallet;
8 |
9 | import com.github.orogvany.bip32.Network;
10 |
11 | import java.io.UnsupportedEncodingException;
12 |
13 | /**
14 | * Utility class for BIP-44 paths
15 | */
16 | public class Bip44 {
17 | private HdKeyGenerator hdKeyGenerator = new HdKeyGenerator();
18 | // purpose is hardcoded to 44'
19 | private static final int PURPOSE = 44;
20 | // we support just one user account
21 | private static final long ACCOUNT = 0;
22 | // we support just external addresses, 0 is 'external'
23 | private static final int CHANGE = 0;
24 |
25 | /**
26 | * Get a root account address for a given seed
27 | *
28 | * @param seed seed
29 | * @param network network
30 | * @param coinType coinType
31 | * @return
32 | */
33 | public HdAddress getRootAddressFromSeed(byte[] seed, Network network, CoinType coinType) {
34 | HdAddress masterAddress = hdKeyGenerator.getAddressFromSeed(seed, network, coinType);
35 | HdAddress purposeAddress = hdKeyGenerator.getAddress(masterAddress, PURPOSE, true);
36 | HdAddress coinTypeAddress = hdKeyGenerator.getAddress(purposeAddress, coinType.getCoinType(), true);
37 | HdAddress accountAddress = hdKeyGenerator.getAddress(coinTypeAddress, ACCOUNT, true);
38 | HdAddress changeAddress = hdKeyGenerator.getAddress(accountAddress, CHANGE, coinType.getAlwaysHardened());
39 |
40 | return changeAddress;
41 | }
42 |
43 | public HdAddress getAddress(HdAddress address, int index) {
44 | return hdKeyGenerator.getAddress(address, index, address.getCoinType().getAlwaysHardened());
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/wallet/CoinType.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.wallet;
8 |
9 | import com.github.orogvany.bip32.wallet.key.Curve;
10 |
11 | public enum CoinType {
12 | bitcoin(Curve.bitcoin, 0, false),
13 | semux(Curve.ed25519, 7562605, true);
14 |
15 | private final Curve curve;
16 | private final long coinType;
17 | private boolean alwaysHardened;
18 |
19 | CoinType(Curve curve, long coinType, boolean alwaysHardened) {
20 |
21 | this.curve = curve;
22 | this.coinType = coinType;
23 | this.alwaysHardened = alwaysHardened;
24 | }
25 |
26 | /**
27 | * Get the curve
28 | *
29 | * @return curve
30 | */
31 | public Curve getCurve() {
32 | return curve;
33 | }
34 |
35 | /**
36 | * get the coin type
37 | *
38 | * @return coin type
39 | */
40 | public long getCoinType() {
41 | return coinType;
42 | }
43 |
44 | /**
45 | * get whether the addresses must always be hardened
46 | *
47 | * @return always hardened
48 | */
49 | public boolean getAlwaysHardened() {
50 | return alwaysHardened;
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/wallet/HdAddress.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.wallet;
8 |
9 | import com.github.orogvany.bip32.wallet.key.HdPrivateKey;
10 | import com.github.orogvany.bip32.wallet.key.HdPublicKey;
11 |
12 | /**
13 | * An HD pub/private key
14 | */
15 | public class HdAddress {
16 |
17 | private final HdPrivateKey privateKey;
18 | private final HdPublicKey publicKey;
19 | private final CoinType coinType;
20 | private final String path;
21 |
22 | public HdAddress(HdPrivateKey privateKey, HdPublicKey publicKey, CoinType coinType, String path) {
23 | this.privateKey = privateKey;
24 | this.publicKey = publicKey;
25 | this.coinType = coinType;
26 | this.path = path;
27 | }
28 |
29 | public HdPrivateKey getPrivateKey() {
30 | return privateKey;
31 | }
32 |
33 | public HdPublicKey getPublicKey() {
34 | return publicKey;
35 | }
36 |
37 | public CoinType getCoinType() {
38 | return coinType;
39 | }
40 |
41 | public String getPath() {
42 | return path;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/wallet/HdKeyGenerator.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.wallet;
8 |
9 | import com.github.orogvany.bip32.Network;
10 | import com.github.orogvany.bip32.crypto.Hash;
11 | import com.github.orogvany.bip32.crypto.HdUtil;
12 | import com.github.orogvany.bip32.crypto.HmacSha512;
13 | import com.github.orogvany.bip32.crypto.Secp256k1;
14 | import com.github.orogvany.bip32.exception.CryptoException;
15 | import com.github.orogvany.bip32.wallet.key.Curve;
16 | import com.github.orogvany.bip32.wallet.key.HdPrivateKey;
17 | import com.github.orogvany.bip32.wallet.key.HdPublicKey;
18 | import net.i2p.crypto.eddsa.EdDSAPrivateKey;
19 | import net.i2p.crypto.eddsa.EdDSAPublicKey;
20 | import net.i2p.crypto.eddsa.spec.EdDSANamedCurveTable;
21 | import net.i2p.crypto.eddsa.spec.EdDSAParameterSpec;
22 | import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec;
23 | import net.i2p.crypto.eddsa.spec.EdDSAPublicKeySpec;
24 | import org.bouncycastle.math.ec.ECPoint;
25 |
26 | import java.io.UnsupportedEncodingException;
27 | import java.math.BigInteger;
28 | import java.util.Arrays;
29 |
30 | public class HdKeyGenerator {
31 |
32 | private static final EdDSAParameterSpec ED25519SPEC = EdDSANamedCurveTable.getByName("ed25519");
33 | public static final String MASTER_PATH = "m";
34 |
35 | public HdAddress getAddressFromSeed(byte[] seed, Network network, CoinType coinType) {
36 |
37 | Curve curve = coinType.getCurve();
38 | HdPublicKey publicKey = new HdPublicKey();
39 | HdPrivateKey privateKey = new HdPrivateKey();
40 | HdAddress address = new HdAddress(privateKey, publicKey, coinType, MASTER_PATH);
41 |
42 | byte[] I;
43 | try {
44 | I = HmacSha512.hmac512(seed, curve.getSeed().getBytes("UTF-8"));
45 | } catch (UnsupportedEncodingException e) {
46 | throw new CryptoException("Unable to decode seed.");
47 | }
48 |
49 | //split into left/right
50 | byte[] IL = Arrays.copyOfRange(I, 0, 32);
51 | byte[] IR = Arrays.copyOfRange(I, 32, 64);
52 |
53 | BigInteger masterSecretKey = HdUtil.parse256(IL);
54 |
55 | //In case IL is 0 or >=n, the master key is invalid.
56 | if (curve != Curve.ed25519 && masterSecretKey.compareTo(BigInteger.ZERO) == 0 || masterSecretKey.compareTo(Secp256k1.getN()) > 0) {
57 | throw new CryptoException("The master key is invalid");
58 | }
59 |
60 | privateKey.setVersion(network.getPrivateKeyVersion());
61 | privateKey.setDepth(0);
62 | privateKey.setFingerprint(new byte[]{0, 0, 0, 0});
63 | privateKey.setChildNumber(new byte[]{0, 0, 0, 0});
64 | privateKey.setChainCode(IR);
65 | privateKey.setKeyData(HdUtil.append(new byte[]{0}, IL));
66 |
67 | ECPoint point = Secp256k1.point(masterSecretKey);
68 |
69 | publicKey.setVersion(network.getPublicKeyVersion());
70 | publicKey.setDepth(0);
71 | publicKey.setFingerprint(new byte[]{0, 0, 0, 0});
72 | publicKey.setChildNumber(new byte[]{0, 0, 0, 0});
73 | publicKey.setChainCode(IR);
74 | publicKey.setKeyData(Secp256k1.serP(point));
75 |
76 | switch (curve) {
77 | case bitcoin:
78 | privateKey.setPrivateKey(privateKey.getKeyData());
79 | publicKey.setPublicKey(publicKey.getKeyData());
80 | break;
81 | case ed25519:
82 | privateKey.setPrivateKey(IL);
83 | EdDSAPrivateKey sk = new EdDSAPrivateKey(new EdDSAPrivateKeySpec(IL, ED25519SPEC));
84 | EdDSAPublicKey pk = new EdDSAPublicKey(new EdDSAPublicKeySpec(sk.getA(), sk.getParams()));
85 | publicKey.setPublicKey(HdUtil.append(new byte[]{0}, pk.getAbyte()));
86 | break;
87 | }
88 |
89 | return address;
90 | }
91 |
92 | public HdPublicKey getPublicKey(HdPublicKey parent, long child, boolean isHardened, Curve curve) {
93 | if (isHardened) {
94 | throw new CryptoException("Cannot derive child public keys from hardened keys");
95 | }
96 |
97 | if (curve == Curve.ed25519) {
98 | throw new UnsupportedOperationException("Unable to derive ed25519 public key chaining");
99 | }
100 |
101 | byte[] key = parent.getKeyData();
102 | byte[] data = HdUtil.append(key, HdUtil.ser32(child));
103 | //I = HMAC-SHA512(Key = cpar, Data = serP(point(kpar)) || ser32(i))
104 | byte[] I = HmacSha512.hmac512(data, parent.getChainCode());
105 |
106 | byte[] IL = Arrays.copyOfRange(I, 0, 32);
107 | byte[] IR = Arrays.copyOfRange(I, 32, 64);
108 |
109 | HdPublicKey publicKey = new HdPublicKey();
110 |
111 | publicKey.setVersion(parent.getVersion());
112 | publicKey.setDepth(parent.getDepth() + 1);
113 |
114 | byte[] pKd = parent.getKeyData();
115 | byte[] h160 = Hash.h160(pKd);
116 | byte[] childFingerprint = new byte[]{h160[0], h160[1], h160[2], h160[3]};
117 |
118 | BigInteger ILBigInt = HdUtil.parse256(IL);
119 | ECPoint point = Secp256k1.point(ILBigInt);
120 | point = point.add(Secp256k1.deserP(parent.getKeyData()));
121 |
122 | if (ILBigInt.compareTo(Secp256k1.getN()) > 0 || point.isInfinity()) {
123 | throw new CryptoException("This key is invalid, should proceed to next key");
124 | // return getPublicKey(parent, child+1, isHardened);
125 | }
126 |
127 | byte[] childKey = Secp256k1.serP(point);
128 |
129 | publicKey.setFingerprint(childFingerprint);
130 | publicKey.setChildNumber(HdUtil.ser32(child));
131 | publicKey.setChainCode(IR);
132 | publicKey.setKeyData(childKey);
133 |
134 | return publicKey;
135 | }
136 |
137 | public HdAddress getAddress(HdAddress parent, long child, boolean isHardened) {
138 | HdPrivateKey privateKey = new HdPrivateKey();
139 | HdPublicKey publicKey = new HdPublicKey();
140 | HdAddress address = new HdAddress(privateKey, publicKey, parent.getCoinType(),
141 | getPath(parent.getPath(), child, isHardened));
142 |
143 | if (isHardened) {
144 | child += 0x80000000;
145 | } else if (parent.getCoinType().getCurve() == Curve.ed25519) {
146 | throw new CryptoException("ed25519 only supports hardened keys");
147 | }
148 |
149 | byte[] xChain = parent.getPrivateKey().getChainCode();
150 | ///backwards hmac order in method?
151 | byte[] I;
152 | if (isHardened) {
153 | //If so (hardened child): let I = HMAC-SHA512(Key = cpar, Data = 0x00 || ser256(kpar) || ser32(i)). (Note: The 0x00 pads the private key to make it 33 bytes long.)
154 | BigInteger kpar = HdUtil.parse256(parent.getPrivateKey().getKeyData());
155 | byte[] data = HdUtil.append(new byte[]{0}, HdUtil.ser256(kpar));
156 | data = HdUtil.append(data, HdUtil.ser32(child));
157 | I = HmacSha512.hmac512(data, xChain);
158 | } else {
159 | //I = HMAC-SHA512(Key = cpar, Data = serP(point(kpar)) || ser32(i))
160 | //just use public key
161 | byte[] key = parent.getPublicKey().getKeyData();
162 | byte[] xPubKey = HdUtil.append(key, HdUtil.ser32(child));
163 | I = HmacSha512.hmac512(xPubKey, xChain);
164 | }
165 |
166 | //split into left/right
167 | byte[] IL = Arrays.copyOfRange(I, 0, 32);
168 | byte[] IR = Arrays.copyOfRange(I, 32, 64);
169 | //The returned child key ki is parse256(IL) + kpar (mod n).
170 | BigInteger parse256 = HdUtil.parse256(IL);
171 | BigInteger kpar = HdUtil.parse256(parent.getPrivateKey().getKeyData());
172 | BigInteger childSecretKey = parse256.add(kpar).mod(Secp256k1.getN());
173 |
174 | byte[] childNumber = HdUtil.ser32(child);
175 | byte[] fingerprint = HdUtil.getFingerprint(parent.getPrivateKey().getKeyData());
176 |
177 | privateKey.setVersion(parent.getPrivateKey().getVersion());
178 | privateKey.setDepth(parent.getPrivateKey().getDepth() + 1);
179 | privateKey.setFingerprint(fingerprint);
180 | privateKey.setChildNumber(childNumber);
181 | privateKey.setChainCode(IR);
182 | privateKey.setKeyData(HdUtil.append(new byte[]{0}, HdUtil.ser256(childSecretKey)));
183 |
184 | ECPoint point = Secp256k1.point(childSecretKey);
185 |
186 | publicKey.setVersion(parent.getPublicKey().getVersion());
187 | publicKey.setDepth(parent.getPublicKey().getDepth() + 1);
188 |
189 | // can just use fingerprint, but let's use data from parent public key
190 | byte[] pKd = parent.getPublicKey().getKeyData();
191 | byte[] h160 = Hash.h160(pKd);
192 | byte[] childFingerprint = new byte[]{h160[0], h160[1], h160[2], h160[3]};
193 |
194 | publicKey.setFingerprint(childFingerprint);
195 | publicKey.setChildNumber(childNumber);
196 | publicKey.setChainCode(IR);
197 | publicKey.setKeyData(Secp256k1.serP(point));
198 |
199 | switch (parent.getCoinType().getCurve()) {
200 | case bitcoin:
201 | privateKey.setPrivateKey(privateKey.getKeyData());
202 | publicKey.setPublicKey(publicKey.getKeyData());
203 | break;
204 | case ed25519:
205 | privateKey.setPrivateKey(IL);
206 | h160 = Hash.h160(parent.getPublicKey().getPublicKey());
207 | childFingerprint = new byte[]{h160[0], h160[1], h160[2], h160[3]};
208 | publicKey.setFingerprint(childFingerprint);
209 | privateKey.setFingerprint(childFingerprint);
210 | privateKey.setKeyData(HdUtil.append(new byte[]{0}, IL));
211 |
212 | EdDSAPrivateKey sk = new EdDSAPrivateKey(new EdDSAPrivateKeySpec(IL, ED25519SPEC));
213 | EdDSAPublicKey pk = new EdDSAPublicKey(new EdDSAPublicKeySpec(sk.getA(), sk.getParams()));
214 | publicKey.setPublicKey(HdUtil.append(new byte[]{0}, pk.getAbyte()));
215 | break;
216 | }
217 |
218 | return address;
219 | }
220 |
221 | private String getPath(String parentPath, long child, boolean isHardened) {
222 | if(parentPath == null)
223 | {
224 | parentPath = MASTER_PATH;
225 | }
226 | return parentPath + "/" + child + (isHardened ? "'":"");
227 | }
228 | }
229 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/wallet/key/Curve.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.wallet.key;
8 |
9 | public enum Curve {
10 | bitcoin("Bitcoin seed"),
11 | ed25519("ed25519 seed");
12 |
13 | private final String seed;
14 |
15 | Curve(String seed) {
16 | this.seed = seed;
17 | }
18 |
19 | public String getSeed() {
20 | return seed;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/wallet/key/HdKey.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.wallet.key;
8 |
9 | import com.github.orogvany.bip32.crypto.Hash;
10 | import com.github.orogvany.bip32.exception.CryptoException;
11 |
12 | import java.io.ByteArrayOutputStream;
13 | import java.io.IOException;
14 | import java.util.Arrays;
15 |
16 | /**
17 | * Marshalling code for HDKeys to base58 representations.
18 | *
19 | * Will probably be migrated to builder pattern.
20 | */
21 | public class HdKey {
22 | private byte[] version;
23 | private int depth;
24 | private byte[] fingerprint;
25 | private byte[] childNumber;
26 | private byte[] chainCode;
27 | private byte[] keyData;
28 |
29 | HdKey(byte[] version, int depth, byte[] fingerprint, byte[] childNumber, byte[] chainCode, byte[] keyData) {
30 | this.version = version;
31 | this.depth = depth;
32 | this.fingerprint = fingerprint;
33 | this.childNumber = childNumber;
34 | this.chainCode = chainCode;
35 | this.keyData = keyData;
36 | }
37 |
38 | HdKey() {
39 | }
40 |
41 | public void setVersion(byte[] version) {
42 | this.version = version;
43 | }
44 |
45 | public void setDepth(int depth) {
46 | this.depth = depth;
47 | }
48 |
49 | public void setFingerprint(byte[] fingerprint) {
50 | this.fingerprint = fingerprint;
51 | }
52 |
53 | public void setChildNumber(byte[] childNumber) {
54 | this.childNumber = childNumber;
55 | }
56 |
57 | public void setChainCode(byte[] chainCode) {
58 | this.chainCode = chainCode;
59 | }
60 |
61 | public void setKeyData(byte[] keyData) {
62 | this.keyData = keyData;
63 | }
64 |
65 | public byte[] getChainCode() {
66 | return chainCode;
67 | }
68 |
69 | /**
70 | * Get the full chain key. This is not the public/private key for the address.
71 | * @return full HD Key
72 | */
73 | public byte[] getKey() {
74 |
75 | ByteArrayOutputStream key = new ByteArrayOutputStream();
76 |
77 | try {
78 | key.write(version);
79 | key.write(new byte[]{(byte) depth});
80 | key.write(fingerprint);
81 | key.write(childNumber);
82 | key.write(chainCode);
83 | key.write(keyData);
84 | byte[] checksum = Hash.sha256Twice(key.toByteArray());
85 | key.write(Arrays.copyOfRange(checksum, 0, 4));
86 | } catch (IOException e) {
87 | throw new CryptoException("Unable to write key");
88 | }
89 |
90 | return key.toByteArray();
91 | }
92 |
93 | public int getDepth() {
94 | return depth;
95 | }
96 |
97 | public byte[] getKeyData() {
98 | return keyData;
99 | }
100 |
101 | public byte[] getVersion() {
102 | return version;
103 | }
104 |
105 | public byte[] getFingerprint() {
106 | return fingerprint;
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/wallet/key/HdPrivateKey.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.wallet.key;
8 |
9 | /**
10 | * Defines a key with a given private key
11 | */
12 | public class HdPrivateKey extends HdKey {
13 | private byte[] privateKey;
14 |
15 | public byte[] getPrivateKey() {
16 | return privateKey;
17 | }
18 |
19 | public void setPrivateKey(byte[] privateKey) {
20 | this.privateKey = privateKey;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip32/wallet/key/HdPublicKey.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32.wallet.key;
8 |
9 | /**
10 | * Defines a key with a given public key
11 | */
12 | public class HdPublicKey extends HdKey {
13 | private byte[] publicKey;
14 |
15 | public byte[] getPublicKey() {
16 | return publicKey;
17 | }
18 |
19 | public void setPublicKey(byte[] publicKey) {
20 | this.publicKey = publicKey;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip39/Dictionary.java:
--------------------------------------------------------------------------------
1 | package com.github.orogvany.bip39;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.IOException;
5 | import java.io.InputStream;
6 | import java.io.InputStreamReader;
7 | import java.util.ArrayList;
8 | import java.util.List;
9 |
10 | public class Dictionary {
11 |
12 | private List words = new ArrayList<>();
13 |
14 | public Dictionary(Language language) throws IOException {
15 |
16 | InputStream wordStream = this.getClass().getClassLoader().getResourceAsStream("wordlists/" + language.name() + ".txt");
17 |
18 | BufferedReader reader = new BufferedReader(new InputStreamReader(wordStream));
19 | String word;
20 |
21 | while ((word = reader.readLine()) != null) {
22 | words.add(word);
23 | }
24 | }
25 |
26 | public String getWord(int wordIdx) {
27 | return words.get(wordIdx);
28 | }
29 |
30 | public int indexOf(String word) {
31 | return words.indexOf(word);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip39/Language.java:
--------------------------------------------------------------------------------
1 | package com.github.orogvany.bip39;
2 |
3 | public enum Language {
4 | english,
5 | french,
6 | italian,
7 | japanese,
8 | korean,
9 | spanish
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/github/orogvany/bip39/MnemonicGenerator.java:
--------------------------------------------------------------------------------
1 | package com.github.orogvany.bip39;
2 |
3 | import com.github.orogvany.bip32.crypto.BitUtil;
4 | import com.github.orogvany.bip32.crypto.Hash;
5 |
6 | import javax.crypto.SecretKey;
7 | import javax.crypto.SecretKeyFactory;
8 | import javax.crypto.spec.PBEKeySpec;
9 | import java.io.IOException;
10 | import java.nio.charset.Charset;
11 | import java.security.NoSuchAlgorithmException;
12 | import java.security.SecureRandom;
13 | import java.security.spec.InvalidKeySpecException;
14 | import java.util.BitSet;
15 |
16 | /**
17 | * Generate and Process Mnemonic codes
18 | */
19 | public class MnemonicGenerator {
20 |
21 | public static final String SPACE_JP = "\u3000";
22 |
23 | private SecureRandom secureRandom = new SecureRandom();
24 |
25 | public byte[] getSeedFromWordlist(String words, String password, Language language) {
26 |
27 | Dictionary dictionary;
28 | try {
29 | dictionary = new Dictionary(language);
30 | } catch (IOException e) {
31 | throw new IllegalArgumentException("Unknown dictionary");
32 | }
33 |
34 | if (password == null) {
35 | password = "";
36 | }
37 |
38 | //validate that things look alright
39 | String[] wordsList = words.split(" ");
40 | if (wordsList.length < 12) {
41 | throw new IllegalArgumentException("Must be at least 12 words");
42 | }
43 | if (wordsList.length > 24) {
44 | throw new IllegalArgumentException("Must be less than 24 words");
45 | }
46 |
47 | //check all the words are found
48 | for(String word : wordsList) {
49 | if(dictionary.indexOf(word.trim()) < 0)
50 | {
51 | throw new IllegalArgumentException("Unknown word: " + word);
52 |
53 | }
54 | }
55 |
56 | //check the checksum
57 |
58 |
59 |
60 | String salt = "mnemonic" + password;
61 | return pbkdf2HmacSha512(words.trim().toCharArray(), salt.getBytes(Charset.forName("UTF-8")), 2048, 512);
62 | }
63 |
64 | private byte[] pbkdf2HmacSha512(final char[] password, final byte[] salt, final int iterations,
65 | final int keyLength) {
66 |
67 | try {
68 | SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
69 | PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, keyLength);
70 | SecretKey key = skf.generateSecret(spec);
71 | byte[] res = key.getEncoded();
72 | return res;
73 |
74 | } catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
75 | throw new RuntimeException(e);
76 | }
77 | }
78 |
79 | public String getWordlist(int entropyLength, Language language) {
80 | byte[] entropy = secureRandom.generateSeed(entropyLength / 8);
81 | return getWordlist(entropy, language);
82 | }
83 |
84 | public String getWordlist(byte[] entropy, Language language) {
85 |
86 | int entropyLength = entropy.length * 8;
87 | Dictionary dictionary;
88 | try {
89 | dictionary = new Dictionary(language);
90 | } catch (IOException e) {
91 | throw new IllegalArgumentException("Unknown dictionary");
92 | }
93 | if (entropyLength < 128) {
94 | throw new IllegalArgumentException("Entropy must be over 128");
95 | }
96 | if (entropyLength > 256) {
97 | throw new IllegalArgumentException("Entropy must be less than 256");
98 | }
99 | if (entropyLength % 32 != 0) {
100 | throw new IllegalArgumentException("Entropy must be a multiple of 32");
101 | }
102 | int checksumLength = entropyLength / 32;
103 | byte[] hash = Hash.sha256(entropy);
104 |
105 | BitSet hashBitset = createBitset(hash);
106 | BitSet bitSet = createBitset(entropy);
107 |
108 | BitSet checksum = hashBitset.get(0, checksumLength);
109 | bitSet = append(checksum, bitSet, entropyLength);
110 |
111 | StringBuilder ret = new StringBuilder();
112 |
113 | int numWords = (entropyLength + checksumLength) / 11;
114 | for (int i = 0; i < numWords; i++) {
115 | BitSet range = bitSet.get(i * 11, (i + 1) * 11);
116 | int wordIdx = 0;
117 | if (!range.isEmpty()) {
118 | wordIdx = getInt(range);
119 | }
120 | String word = dictionary.getWord(wordIdx);
121 | if (i > 0) {
122 | ret.append(" ");
123 | }
124 | ret.append(word);
125 |
126 | }
127 |
128 | return ret.toString();
129 | }
130 |
131 | /**
132 | * For some reason Bitset.valueOf() does not return correct data we
133 | * expect.
134 | *
135 | * @param bytes
136 | * @return
137 | */
138 | private BitSet createBitset(byte[] bytes) {
139 | BitSet ret = new BitSet();
140 | int offset = 0;
141 | for (byte b : bytes) {
142 | for (int i = 1; i < 9; i++) {
143 | if (BitUtil.checkBit(b, i)) {
144 | ret.set(offset);
145 | }
146 | offset++;
147 | }
148 | }
149 | return ret;
150 | }
151 |
152 | /**
153 | * get a printable version of a bitset
154 | *
155 | * @param bitset
156 | * @param length
157 | * @return
158 | */
159 | private String getBitString(BitSet bitset, int length) {
160 | StringBuilder ret = new StringBuilder();
161 | for (int i = 0; i < length; i++) {
162 | ret.append(bitset.get(i) ? "1" : "0");
163 | }
164 | return ret.toString();
165 | }
166 |
167 | private int getInt(BitSet range) {
168 |
169 | int ret = 0;
170 | for (int i = 0; i < 11; i++) {
171 |
172 | ret = ret << 1;
173 | if (range.get(i)) {
174 | ret |= 1;
175 | }
176 | }
177 | return ret;
178 | }
179 |
180 | private BitSet append(BitSet a, BitSet b, int bLength) {
181 |
182 | //shift A << bLenght
183 | BitSet ret = shift(a, bLength);
184 | ret.or(b);
185 | return ret;
186 | }
187 |
188 | private BitSet shift(BitSet bitSet, int length) {
189 | BitSet ret = new BitSet(bitSet.length() + length);
190 | for (int i = 0; i < bitSet.length(); i++) {
191 | if (bitSet.get(i)) {
192 | ret.set(i + length);
193 | }
194 | }
195 | return ret;
196 | }
197 | }
198 |
--------------------------------------------------------------------------------
/src/main/resources/wordlists/english.txt:
--------------------------------------------------------------------------------
1 | abandon
2 | ability
3 | able
4 | about
5 | above
6 | absent
7 | absorb
8 | abstract
9 | absurd
10 | abuse
11 | access
12 | accident
13 | account
14 | accuse
15 | achieve
16 | acid
17 | acoustic
18 | acquire
19 | across
20 | act
21 | action
22 | actor
23 | actress
24 | actual
25 | adapt
26 | add
27 | addict
28 | address
29 | adjust
30 | admit
31 | adult
32 | advance
33 | advice
34 | aerobic
35 | affair
36 | afford
37 | afraid
38 | again
39 | age
40 | agent
41 | agree
42 | ahead
43 | aim
44 | air
45 | airport
46 | aisle
47 | alarm
48 | album
49 | alcohol
50 | alert
51 | alien
52 | all
53 | alley
54 | allow
55 | almost
56 | alone
57 | alpha
58 | already
59 | also
60 | alter
61 | always
62 | amateur
63 | amazing
64 | among
65 | amount
66 | amused
67 | analyst
68 | anchor
69 | ancient
70 | anger
71 | angle
72 | angry
73 | animal
74 | ankle
75 | announce
76 | annual
77 | another
78 | answer
79 | antenna
80 | antique
81 | anxiety
82 | any
83 | apart
84 | apology
85 | appear
86 | apple
87 | approve
88 | april
89 | arch
90 | arctic
91 | area
92 | arena
93 | argue
94 | arm
95 | armed
96 | armor
97 | army
98 | around
99 | arrange
100 | arrest
101 | arrive
102 | arrow
103 | art
104 | artefact
105 | artist
106 | artwork
107 | ask
108 | aspect
109 | assault
110 | asset
111 | assist
112 | assume
113 | asthma
114 | athlete
115 | atom
116 | attack
117 | attend
118 | attitude
119 | attract
120 | auction
121 | audit
122 | august
123 | aunt
124 | author
125 | auto
126 | autumn
127 | average
128 | avocado
129 | avoid
130 | awake
131 | aware
132 | away
133 | awesome
134 | awful
135 | awkward
136 | axis
137 | baby
138 | bachelor
139 | bacon
140 | badge
141 | bag
142 | balance
143 | balcony
144 | ball
145 | bamboo
146 | banana
147 | banner
148 | bar
149 | barely
150 | bargain
151 | barrel
152 | base
153 | basic
154 | basket
155 | battle
156 | beach
157 | bean
158 | beauty
159 | because
160 | become
161 | beef
162 | before
163 | begin
164 | behave
165 | behind
166 | believe
167 | below
168 | belt
169 | bench
170 | benefit
171 | best
172 | betray
173 | better
174 | between
175 | beyond
176 | bicycle
177 | bid
178 | bike
179 | bind
180 | biology
181 | bird
182 | birth
183 | bitter
184 | black
185 | blade
186 | blame
187 | blanket
188 | blast
189 | bleak
190 | bless
191 | blind
192 | blood
193 | blossom
194 | blouse
195 | blue
196 | blur
197 | blush
198 | board
199 | boat
200 | body
201 | boil
202 | bomb
203 | bone
204 | bonus
205 | book
206 | boost
207 | border
208 | boring
209 | borrow
210 | boss
211 | bottom
212 | bounce
213 | box
214 | boy
215 | bracket
216 | brain
217 | brand
218 | brass
219 | brave
220 | bread
221 | breeze
222 | brick
223 | bridge
224 | brief
225 | bright
226 | bring
227 | brisk
228 | broccoli
229 | broken
230 | bronze
231 | broom
232 | brother
233 | brown
234 | brush
235 | bubble
236 | buddy
237 | budget
238 | buffalo
239 | build
240 | bulb
241 | bulk
242 | bullet
243 | bundle
244 | bunker
245 | burden
246 | burger
247 | burst
248 | bus
249 | business
250 | busy
251 | butter
252 | buyer
253 | buzz
254 | cabbage
255 | cabin
256 | cable
257 | cactus
258 | cage
259 | cake
260 | call
261 | calm
262 | camera
263 | camp
264 | can
265 | canal
266 | cancel
267 | candy
268 | cannon
269 | canoe
270 | canvas
271 | canyon
272 | capable
273 | capital
274 | captain
275 | car
276 | carbon
277 | card
278 | cargo
279 | carpet
280 | carry
281 | cart
282 | case
283 | cash
284 | casino
285 | castle
286 | casual
287 | cat
288 | catalog
289 | catch
290 | category
291 | cattle
292 | caught
293 | cause
294 | caution
295 | cave
296 | ceiling
297 | celery
298 | cement
299 | census
300 | century
301 | cereal
302 | certain
303 | chair
304 | chalk
305 | champion
306 | change
307 | chaos
308 | chapter
309 | charge
310 | chase
311 | chat
312 | cheap
313 | check
314 | cheese
315 | chef
316 | cherry
317 | chest
318 | chicken
319 | chief
320 | child
321 | chimney
322 | choice
323 | choose
324 | chronic
325 | chuckle
326 | chunk
327 | churn
328 | cigar
329 | cinnamon
330 | circle
331 | citizen
332 | city
333 | civil
334 | claim
335 | clap
336 | clarify
337 | claw
338 | clay
339 | clean
340 | clerk
341 | clever
342 | click
343 | client
344 | cliff
345 | climb
346 | clinic
347 | clip
348 | clock
349 | clog
350 | close
351 | cloth
352 | cloud
353 | clown
354 | club
355 | clump
356 | cluster
357 | clutch
358 | coach
359 | coast
360 | coconut
361 | code
362 | coffee
363 | coil
364 | coin
365 | collect
366 | color
367 | column
368 | combine
369 | come
370 | comfort
371 | comic
372 | common
373 | company
374 | concert
375 | conduct
376 | confirm
377 | congress
378 | connect
379 | consider
380 | control
381 | convince
382 | cook
383 | cool
384 | copper
385 | copy
386 | coral
387 | core
388 | corn
389 | correct
390 | cost
391 | cotton
392 | couch
393 | country
394 | couple
395 | course
396 | cousin
397 | cover
398 | coyote
399 | crack
400 | cradle
401 | craft
402 | cram
403 | crane
404 | crash
405 | crater
406 | crawl
407 | crazy
408 | cream
409 | credit
410 | creek
411 | crew
412 | cricket
413 | crime
414 | crisp
415 | critic
416 | crop
417 | cross
418 | crouch
419 | crowd
420 | crucial
421 | cruel
422 | cruise
423 | crumble
424 | crunch
425 | crush
426 | cry
427 | crystal
428 | cube
429 | culture
430 | cup
431 | cupboard
432 | curious
433 | current
434 | curtain
435 | curve
436 | cushion
437 | custom
438 | cute
439 | cycle
440 | dad
441 | damage
442 | damp
443 | dance
444 | danger
445 | daring
446 | dash
447 | daughter
448 | dawn
449 | day
450 | deal
451 | debate
452 | debris
453 | decade
454 | december
455 | decide
456 | decline
457 | decorate
458 | decrease
459 | deer
460 | defense
461 | define
462 | defy
463 | degree
464 | delay
465 | deliver
466 | demand
467 | demise
468 | denial
469 | dentist
470 | deny
471 | depart
472 | depend
473 | deposit
474 | depth
475 | deputy
476 | derive
477 | describe
478 | desert
479 | design
480 | desk
481 | despair
482 | destroy
483 | detail
484 | detect
485 | develop
486 | device
487 | devote
488 | diagram
489 | dial
490 | diamond
491 | diary
492 | dice
493 | diesel
494 | diet
495 | differ
496 | digital
497 | dignity
498 | dilemma
499 | dinner
500 | dinosaur
501 | direct
502 | dirt
503 | disagree
504 | discover
505 | disease
506 | dish
507 | dismiss
508 | disorder
509 | display
510 | distance
511 | divert
512 | divide
513 | divorce
514 | dizzy
515 | doctor
516 | document
517 | dog
518 | doll
519 | dolphin
520 | domain
521 | donate
522 | donkey
523 | donor
524 | door
525 | dose
526 | double
527 | dove
528 | draft
529 | dragon
530 | drama
531 | drastic
532 | draw
533 | dream
534 | dress
535 | drift
536 | drill
537 | drink
538 | drip
539 | drive
540 | drop
541 | drum
542 | dry
543 | duck
544 | dumb
545 | dune
546 | during
547 | dust
548 | dutch
549 | duty
550 | dwarf
551 | dynamic
552 | eager
553 | eagle
554 | early
555 | earn
556 | earth
557 | easily
558 | east
559 | easy
560 | echo
561 | ecology
562 | economy
563 | edge
564 | edit
565 | educate
566 | effort
567 | egg
568 | eight
569 | either
570 | elbow
571 | elder
572 | electric
573 | elegant
574 | element
575 | elephant
576 | elevator
577 | elite
578 | else
579 | embark
580 | embody
581 | embrace
582 | emerge
583 | emotion
584 | employ
585 | empower
586 | empty
587 | enable
588 | enact
589 | end
590 | endless
591 | endorse
592 | enemy
593 | energy
594 | enforce
595 | engage
596 | engine
597 | enhance
598 | enjoy
599 | enlist
600 | enough
601 | enrich
602 | enroll
603 | ensure
604 | enter
605 | entire
606 | entry
607 | envelope
608 | episode
609 | equal
610 | equip
611 | era
612 | erase
613 | erode
614 | erosion
615 | error
616 | erupt
617 | escape
618 | essay
619 | essence
620 | estate
621 | eternal
622 | ethics
623 | evidence
624 | evil
625 | evoke
626 | evolve
627 | exact
628 | example
629 | excess
630 | exchange
631 | excite
632 | exclude
633 | excuse
634 | execute
635 | exercise
636 | exhaust
637 | exhibit
638 | exile
639 | exist
640 | exit
641 | exotic
642 | expand
643 | expect
644 | expire
645 | explain
646 | expose
647 | express
648 | extend
649 | extra
650 | eye
651 | eyebrow
652 | fabric
653 | face
654 | faculty
655 | fade
656 | faint
657 | faith
658 | fall
659 | false
660 | fame
661 | family
662 | famous
663 | fan
664 | fancy
665 | fantasy
666 | farm
667 | fashion
668 | fat
669 | fatal
670 | father
671 | fatigue
672 | fault
673 | favorite
674 | feature
675 | february
676 | federal
677 | fee
678 | feed
679 | feel
680 | female
681 | fence
682 | festival
683 | fetch
684 | fever
685 | few
686 | fiber
687 | fiction
688 | field
689 | figure
690 | file
691 | film
692 | filter
693 | final
694 | find
695 | fine
696 | finger
697 | finish
698 | fire
699 | firm
700 | first
701 | fiscal
702 | fish
703 | fit
704 | fitness
705 | fix
706 | flag
707 | flame
708 | flash
709 | flat
710 | flavor
711 | flee
712 | flight
713 | flip
714 | float
715 | flock
716 | floor
717 | flower
718 | fluid
719 | flush
720 | fly
721 | foam
722 | focus
723 | fog
724 | foil
725 | fold
726 | follow
727 | food
728 | foot
729 | force
730 | forest
731 | forget
732 | fork
733 | fortune
734 | forum
735 | forward
736 | fossil
737 | foster
738 | found
739 | fox
740 | fragile
741 | frame
742 | frequent
743 | fresh
744 | friend
745 | fringe
746 | frog
747 | front
748 | frost
749 | frown
750 | frozen
751 | fruit
752 | fuel
753 | fun
754 | funny
755 | furnace
756 | fury
757 | future
758 | gadget
759 | gain
760 | galaxy
761 | gallery
762 | game
763 | gap
764 | garage
765 | garbage
766 | garden
767 | garlic
768 | garment
769 | gas
770 | gasp
771 | gate
772 | gather
773 | gauge
774 | gaze
775 | general
776 | genius
777 | genre
778 | gentle
779 | genuine
780 | gesture
781 | ghost
782 | giant
783 | gift
784 | giggle
785 | ginger
786 | giraffe
787 | girl
788 | give
789 | glad
790 | glance
791 | glare
792 | glass
793 | glide
794 | glimpse
795 | globe
796 | gloom
797 | glory
798 | glove
799 | glow
800 | glue
801 | goat
802 | goddess
803 | gold
804 | good
805 | goose
806 | gorilla
807 | gospel
808 | gossip
809 | govern
810 | gown
811 | grab
812 | grace
813 | grain
814 | grant
815 | grape
816 | grass
817 | gravity
818 | great
819 | green
820 | grid
821 | grief
822 | grit
823 | grocery
824 | group
825 | grow
826 | grunt
827 | guard
828 | guess
829 | guide
830 | guilt
831 | guitar
832 | gun
833 | gym
834 | habit
835 | hair
836 | half
837 | hammer
838 | hamster
839 | hand
840 | happy
841 | harbor
842 | hard
843 | harsh
844 | harvest
845 | hat
846 | have
847 | hawk
848 | hazard
849 | head
850 | health
851 | heart
852 | heavy
853 | hedgehog
854 | height
855 | hello
856 | helmet
857 | help
858 | hen
859 | hero
860 | hidden
861 | high
862 | hill
863 | hint
864 | hip
865 | hire
866 | history
867 | hobby
868 | hockey
869 | hold
870 | hole
871 | holiday
872 | hollow
873 | home
874 | honey
875 | hood
876 | hope
877 | horn
878 | horror
879 | horse
880 | hospital
881 | host
882 | hotel
883 | hour
884 | hover
885 | hub
886 | huge
887 | human
888 | humble
889 | humor
890 | hundred
891 | hungry
892 | hunt
893 | hurdle
894 | hurry
895 | hurt
896 | husband
897 | hybrid
898 | ice
899 | icon
900 | idea
901 | identify
902 | idle
903 | ignore
904 | ill
905 | illegal
906 | illness
907 | image
908 | imitate
909 | immense
910 | immune
911 | impact
912 | impose
913 | improve
914 | impulse
915 | inch
916 | include
917 | income
918 | increase
919 | index
920 | indicate
921 | indoor
922 | industry
923 | infant
924 | inflict
925 | inform
926 | inhale
927 | inherit
928 | initial
929 | inject
930 | injury
931 | inmate
932 | inner
933 | innocent
934 | input
935 | inquiry
936 | insane
937 | insect
938 | inside
939 | inspire
940 | install
941 | intact
942 | interest
943 | into
944 | invest
945 | invite
946 | involve
947 | iron
948 | island
949 | isolate
950 | issue
951 | item
952 | ivory
953 | jacket
954 | jaguar
955 | jar
956 | jazz
957 | jealous
958 | jeans
959 | jelly
960 | jewel
961 | job
962 | join
963 | joke
964 | journey
965 | joy
966 | judge
967 | juice
968 | jump
969 | jungle
970 | junior
971 | junk
972 | just
973 | kangaroo
974 | keen
975 | keep
976 | ketchup
977 | key
978 | kick
979 | kid
980 | kidney
981 | kind
982 | kingdom
983 | kiss
984 | kit
985 | kitchen
986 | kite
987 | kitten
988 | kiwi
989 | knee
990 | knife
991 | knock
992 | know
993 | lab
994 | label
995 | labor
996 | ladder
997 | lady
998 | lake
999 | lamp
1000 | language
1001 | laptop
1002 | large
1003 | later
1004 | latin
1005 | laugh
1006 | laundry
1007 | lava
1008 | law
1009 | lawn
1010 | lawsuit
1011 | layer
1012 | lazy
1013 | leader
1014 | leaf
1015 | learn
1016 | leave
1017 | lecture
1018 | left
1019 | leg
1020 | legal
1021 | legend
1022 | leisure
1023 | lemon
1024 | lend
1025 | length
1026 | lens
1027 | leopard
1028 | lesson
1029 | letter
1030 | level
1031 | liar
1032 | liberty
1033 | library
1034 | license
1035 | life
1036 | lift
1037 | light
1038 | like
1039 | limb
1040 | limit
1041 | link
1042 | lion
1043 | liquid
1044 | list
1045 | little
1046 | live
1047 | lizard
1048 | load
1049 | loan
1050 | lobster
1051 | local
1052 | lock
1053 | logic
1054 | lonely
1055 | long
1056 | loop
1057 | lottery
1058 | loud
1059 | lounge
1060 | love
1061 | loyal
1062 | lucky
1063 | luggage
1064 | lumber
1065 | lunar
1066 | lunch
1067 | luxury
1068 | lyrics
1069 | machine
1070 | mad
1071 | magic
1072 | magnet
1073 | maid
1074 | mail
1075 | main
1076 | major
1077 | make
1078 | mammal
1079 | man
1080 | manage
1081 | mandate
1082 | mango
1083 | mansion
1084 | manual
1085 | maple
1086 | marble
1087 | march
1088 | margin
1089 | marine
1090 | market
1091 | marriage
1092 | mask
1093 | mass
1094 | master
1095 | match
1096 | material
1097 | math
1098 | matrix
1099 | matter
1100 | maximum
1101 | maze
1102 | meadow
1103 | mean
1104 | measure
1105 | meat
1106 | mechanic
1107 | medal
1108 | media
1109 | melody
1110 | melt
1111 | member
1112 | memory
1113 | mention
1114 | menu
1115 | mercy
1116 | merge
1117 | merit
1118 | merry
1119 | mesh
1120 | message
1121 | metal
1122 | method
1123 | middle
1124 | midnight
1125 | milk
1126 | million
1127 | mimic
1128 | mind
1129 | minimum
1130 | minor
1131 | minute
1132 | miracle
1133 | mirror
1134 | misery
1135 | miss
1136 | mistake
1137 | mix
1138 | mixed
1139 | mixture
1140 | mobile
1141 | model
1142 | modify
1143 | mom
1144 | moment
1145 | monitor
1146 | monkey
1147 | monster
1148 | month
1149 | moon
1150 | moral
1151 | more
1152 | morning
1153 | mosquito
1154 | mother
1155 | motion
1156 | motor
1157 | mountain
1158 | mouse
1159 | move
1160 | movie
1161 | much
1162 | muffin
1163 | mule
1164 | multiply
1165 | muscle
1166 | museum
1167 | mushroom
1168 | music
1169 | must
1170 | mutual
1171 | myself
1172 | mystery
1173 | myth
1174 | naive
1175 | name
1176 | napkin
1177 | narrow
1178 | nasty
1179 | nation
1180 | nature
1181 | near
1182 | neck
1183 | need
1184 | negative
1185 | neglect
1186 | neither
1187 | nephew
1188 | nerve
1189 | nest
1190 | net
1191 | network
1192 | neutral
1193 | never
1194 | news
1195 | next
1196 | nice
1197 | night
1198 | noble
1199 | noise
1200 | nominee
1201 | noodle
1202 | normal
1203 | north
1204 | nose
1205 | notable
1206 | note
1207 | nothing
1208 | notice
1209 | novel
1210 | now
1211 | nuclear
1212 | number
1213 | nurse
1214 | nut
1215 | oak
1216 | obey
1217 | object
1218 | oblige
1219 | obscure
1220 | observe
1221 | obtain
1222 | obvious
1223 | occur
1224 | ocean
1225 | october
1226 | odor
1227 | off
1228 | offer
1229 | office
1230 | often
1231 | oil
1232 | okay
1233 | old
1234 | olive
1235 | olympic
1236 | omit
1237 | once
1238 | one
1239 | onion
1240 | online
1241 | only
1242 | open
1243 | opera
1244 | opinion
1245 | oppose
1246 | option
1247 | orange
1248 | orbit
1249 | orchard
1250 | order
1251 | ordinary
1252 | organ
1253 | orient
1254 | original
1255 | orphan
1256 | ostrich
1257 | other
1258 | outdoor
1259 | outer
1260 | output
1261 | outside
1262 | oval
1263 | oven
1264 | over
1265 | own
1266 | owner
1267 | oxygen
1268 | oyster
1269 | ozone
1270 | pact
1271 | paddle
1272 | page
1273 | pair
1274 | palace
1275 | palm
1276 | panda
1277 | panel
1278 | panic
1279 | panther
1280 | paper
1281 | parade
1282 | parent
1283 | park
1284 | parrot
1285 | party
1286 | pass
1287 | patch
1288 | path
1289 | patient
1290 | patrol
1291 | pattern
1292 | pause
1293 | pave
1294 | payment
1295 | peace
1296 | peanut
1297 | pear
1298 | peasant
1299 | pelican
1300 | pen
1301 | penalty
1302 | pencil
1303 | people
1304 | pepper
1305 | perfect
1306 | permit
1307 | person
1308 | pet
1309 | phone
1310 | photo
1311 | phrase
1312 | physical
1313 | piano
1314 | picnic
1315 | picture
1316 | piece
1317 | pig
1318 | pigeon
1319 | pill
1320 | pilot
1321 | pink
1322 | pioneer
1323 | pipe
1324 | pistol
1325 | pitch
1326 | pizza
1327 | place
1328 | planet
1329 | plastic
1330 | plate
1331 | play
1332 | please
1333 | pledge
1334 | pluck
1335 | plug
1336 | plunge
1337 | poem
1338 | poet
1339 | point
1340 | polar
1341 | pole
1342 | police
1343 | pond
1344 | pony
1345 | pool
1346 | popular
1347 | portion
1348 | position
1349 | possible
1350 | post
1351 | potato
1352 | pottery
1353 | poverty
1354 | powder
1355 | power
1356 | practice
1357 | praise
1358 | predict
1359 | prefer
1360 | prepare
1361 | present
1362 | pretty
1363 | prevent
1364 | price
1365 | pride
1366 | primary
1367 | print
1368 | priority
1369 | prison
1370 | private
1371 | prize
1372 | problem
1373 | process
1374 | produce
1375 | profit
1376 | program
1377 | project
1378 | promote
1379 | proof
1380 | property
1381 | prosper
1382 | protect
1383 | proud
1384 | provide
1385 | public
1386 | pudding
1387 | pull
1388 | pulp
1389 | pulse
1390 | pumpkin
1391 | punch
1392 | pupil
1393 | puppy
1394 | purchase
1395 | purity
1396 | purpose
1397 | purse
1398 | push
1399 | put
1400 | puzzle
1401 | pyramid
1402 | quality
1403 | quantum
1404 | quarter
1405 | question
1406 | quick
1407 | quit
1408 | quiz
1409 | quote
1410 | rabbit
1411 | raccoon
1412 | race
1413 | rack
1414 | radar
1415 | radio
1416 | rail
1417 | rain
1418 | raise
1419 | rally
1420 | ramp
1421 | ranch
1422 | random
1423 | range
1424 | rapid
1425 | rare
1426 | rate
1427 | rather
1428 | raven
1429 | raw
1430 | razor
1431 | ready
1432 | real
1433 | reason
1434 | rebel
1435 | rebuild
1436 | recall
1437 | receive
1438 | recipe
1439 | record
1440 | recycle
1441 | reduce
1442 | reflect
1443 | reform
1444 | refuse
1445 | region
1446 | regret
1447 | regular
1448 | reject
1449 | relax
1450 | release
1451 | relief
1452 | rely
1453 | remain
1454 | remember
1455 | remind
1456 | remove
1457 | render
1458 | renew
1459 | rent
1460 | reopen
1461 | repair
1462 | repeat
1463 | replace
1464 | report
1465 | require
1466 | rescue
1467 | resemble
1468 | resist
1469 | resource
1470 | response
1471 | result
1472 | retire
1473 | retreat
1474 | return
1475 | reunion
1476 | reveal
1477 | review
1478 | reward
1479 | rhythm
1480 | rib
1481 | ribbon
1482 | rice
1483 | rich
1484 | ride
1485 | ridge
1486 | rifle
1487 | right
1488 | rigid
1489 | ring
1490 | riot
1491 | ripple
1492 | risk
1493 | ritual
1494 | rival
1495 | river
1496 | road
1497 | roast
1498 | robot
1499 | robust
1500 | rocket
1501 | romance
1502 | roof
1503 | rookie
1504 | room
1505 | rose
1506 | rotate
1507 | rough
1508 | round
1509 | route
1510 | royal
1511 | rubber
1512 | rude
1513 | rug
1514 | rule
1515 | run
1516 | runway
1517 | rural
1518 | sad
1519 | saddle
1520 | sadness
1521 | safe
1522 | sail
1523 | salad
1524 | salmon
1525 | salon
1526 | salt
1527 | salute
1528 | same
1529 | sample
1530 | sand
1531 | satisfy
1532 | satoshi
1533 | sauce
1534 | sausage
1535 | save
1536 | say
1537 | scale
1538 | scan
1539 | scare
1540 | scatter
1541 | scene
1542 | scheme
1543 | school
1544 | science
1545 | scissors
1546 | scorpion
1547 | scout
1548 | scrap
1549 | screen
1550 | script
1551 | scrub
1552 | sea
1553 | search
1554 | season
1555 | seat
1556 | second
1557 | secret
1558 | section
1559 | security
1560 | seed
1561 | seek
1562 | segment
1563 | select
1564 | sell
1565 | seminar
1566 | senior
1567 | sense
1568 | sentence
1569 | series
1570 | service
1571 | session
1572 | settle
1573 | setup
1574 | seven
1575 | shadow
1576 | shaft
1577 | shallow
1578 | share
1579 | shed
1580 | shell
1581 | sheriff
1582 | shield
1583 | shift
1584 | shine
1585 | ship
1586 | shiver
1587 | shock
1588 | shoe
1589 | shoot
1590 | shop
1591 | short
1592 | shoulder
1593 | shove
1594 | shrimp
1595 | shrug
1596 | shuffle
1597 | shy
1598 | sibling
1599 | sick
1600 | side
1601 | siege
1602 | sight
1603 | sign
1604 | silent
1605 | silk
1606 | silly
1607 | silver
1608 | similar
1609 | simple
1610 | since
1611 | sing
1612 | siren
1613 | sister
1614 | situate
1615 | six
1616 | size
1617 | skate
1618 | sketch
1619 | ski
1620 | skill
1621 | skin
1622 | skirt
1623 | skull
1624 | slab
1625 | slam
1626 | sleep
1627 | slender
1628 | slice
1629 | slide
1630 | slight
1631 | slim
1632 | slogan
1633 | slot
1634 | slow
1635 | slush
1636 | small
1637 | smart
1638 | smile
1639 | smoke
1640 | smooth
1641 | snack
1642 | snake
1643 | snap
1644 | sniff
1645 | snow
1646 | soap
1647 | soccer
1648 | social
1649 | sock
1650 | soda
1651 | soft
1652 | solar
1653 | soldier
1654 | solid
1655 | solution
1656 | solve
1657 | someone
1658 | song
1659 | soon
1660 | sorry
1661 | sort
1662 | soul
1663 | sound
1664 | soup
1665 | source
1666 | south
1667 | space
1668 | spare
1669 | spatial
1670 | spawn
1671 | speak
1672 | special
1673 | speed
1674 | spell
1675 | spend
1676 | sphere
1677 | spice
1678 | spider
1679 | spike
1680 | spin
1681 | spirit
1682 | split
1683 | spoil
1684 | sponsor
1685 | spoon
1686 | sport
1687 | spot
1688 | spray
1689 | spread
1690 | spring
1691 | spy
1692 | square
1693 | squeeze
1694 | squirrel
1695 | stable
1696 | stadium
1697 | staff
1698 | stage
1699 | stairs
1700 | stamp
1701 | stand
1702 | start
1703 | state
1704 | stay
1705 | steak
1706 | steel
1707 | stem
1708 | step
1709 | stereo
1710 | stick
1711 | still
1712 | sting
1713 | stock
1714 | stomach
1715 | stone
1716 | stool
1717 | story
1718 | stove
1719 | strategy
1720 | street
1721 | strike
1722 | strong
1723 | struggle
1724 | student
1725 | stuff
1726 | stumble
1727 | style
1728 | subject
1729 | submit
1730 | subway
1731 | success
1732 | such
1733 | sudden
1734 | suffer
1735 | sugar
1736 | suggest
1737 | suit
1738 | summer
1739 | sun
1740 | sunny
1741 | sunset
1742 | super
1743 | supply
1744 | supreme
1745 | sure
1746 | surface
1747 | surge
1748 | surprise
1749 | surround
1750 | survey
1751 | suspect
1752 | sustain
1753 | swallow
1754 | swamp
1755 | swap
1756 | swarm
1757 | swear
1758 | sweet
1759 | swift
1760 | swim
1761 | swing
1762 | switch
1763 | sword
1764 | symbol
1765 | symptom
1766 | syrup
1767 | system
1768 | table
1769 | tackle
1770 | tag
1771 | tail
1772 | talent
1773 | talk
1774 | tank
1775 | tape
1776 | target
1777 | task
1778 | taste
1779 | tattoo
1780 | taxi
1781 | teach
1782 | team
1783 | tell
1784 | ten
1785 | tenant
1786 | tennis
1787 | tent
1788 | term
1789 | test
1790 | text
1791 | thank
1792 | that
1793 | theme
1794 | then
1795 | theory
1796 | there
1797 | they
1798 | thing
1799 | this
1800 | thought
1801 | three
1802 | thrive
1803 | throw
1804 | thumb
1805 | thunder
1806 | ticket
1807 | tide
1808 | tiger
1809 | tilt
1810 | timber
1811 | time
1812 | tiny
1813 | tip
1814 | tired
1815 | tissue
1816 | title
1817 | toast
1818 | tobacco
1819 | today
1820 | toddler
1821 | toe
1822 | together
1823 | toilet
1824 | token
1825 | tomato
1826 | tomorrow
1827 | tone
1828 | tongue
1829 | tonight
1830 | tool
1831 | tooth
1832 | top
1833 | topic
1834 | topple
1835 | torch
1836 | tornado
1837 | tortoise
1838 | toss
1839 | total
1840 | tourist
1841 | toward
1842 | tower
1843 | town
1844 | toy
1845 | track
1846 | trade
1847 | traffic
1848 | tragic
1849 | train
1850 | transfer
1851 | trap
1852 | trash
1853 | travel
1854 | tray
1855 | treat
1856 | tree
1857 | trend
1858 | trial
1859 | tribe
1860 | trick
1861 | trigger
1862 | trim
1863 | trip
1864 | trophy
1865 | trouble
1866 | truck
1867 | true
1868 | truly
1869 | trumpet
1870 | trust
1871 | truth
1872 | try
1873 | tube
1874 | tuition
1875 | tumble
1876 | tuna
1877 | tunnel
1878 | turkey
1879 | turn
1880 | turtle
1881 | twelve
1882 | twenty
1883 | twice
1884 | twin
1885 | twist
1886 | two
1887 | type
1888 | typical
1889 | ugly
1890 | umbrella
1891 | unable
1892 | unaware
1893 | uncle
1894 | uncover
1895 | under
1896 | undo
1897 | unfair
1898 | unfold
1899 | unhappy
1900 | uniform
1901 | unique
1902 | unit
1903 | universe
1904 | unknown
1905 | unlock
1906 | until
1907 | unusual
1908 | unveil
1909 | update
1910 | upgrade
1911 | uphold
1912 | upon
1913 | upper
1914 | upset
1915 | urban
1916 | urge
1917 | usage
1918 | use
1919 | used
1920 | useful
1921 | useless
1922 | usual
1923 | utility
1924 | vacant
1925 | vacuum
1926 | vague
1927 | valid
1928 | valley
1929 | valve
1930 | van
1931 | vanish
1932 | vapor
1933 | various
1934 | vast
1935 | vault
1936 | vehicle
1937 | velvet
1938 | vendor
1939 | venture
1940 | venue
1941 | verb
1942 | verify
1943 | version
1944 | very
1945 | vessel
1946 | veteran
1947 | viable
1948 | vibrant
1949 | vicious
1950 | victory
1951 | video
1952 | view
1953 | village
1954 | vintage
1955 | violin
1956 | virtual
1957 | virus
1958 | visa
1959 | visit
1960 | visual
1961 | vital
1962 | vivid
1963 | vocal
1964 | voice
1965 | void
1966 | volcano
1967 | volume
1968 | vote
1969 | voyage
1970 | wage
1971 | wagon
1972 | wait
1973 | walk
1974 | wall
1975 | walnut
1976 | want
1977 | warfare
1978 | warm
1979 | warrior
1980 | wash
1981 | wasp
1982 | waste
1983 | water
1984 | wave
1985 | way
1986 | wealth
1987 | weapon
1988 | wear
1989 | weasel
1990 | weather
1991 | web
1992 | wedding
1993 | weekend
1994 | weird
1995 | welcome
1996 | west
1997 | wet
1998 | whale
1999 | what
2000 | wheat
2001 | wheel
2002 | when
2003 | where
2004 | whip
2005 | whisper
2006 | wide
2007 | width
2008 | wife
2009 | wild
2010 | will
2011 | win
2012 | window
2013 | wine
2014 | wing
2015 | wink
2016 | winner
2017 | winter
2018 | wire
2019 | wisdom
2020 | wise
2021 | wish
2022 | witness
2023 | wolf
2024 | woman
2025 | wonder
2026 | wood
2027 | wool
2028 | word
2029 | work
2030 | world
2031 | worry
2032 | worth
2033 | wrap
2034 | wreck
2035 | wrestle
2036 | wrist
2037 | write
2038 | wrong
2039 | yard
2040 | year
2041 | yellow
2042 | you
2043 | young
2044 | youth
2045 | zebra
2046 | zero
2047 | zone
2048 | zoo
--------------------------------------------------------------------------------
/src/main/resources/wordlists/french.txt:
--------------------------------------------------------------------------------
1 | abaisser
2 | abandon
3 | abdiquer
4 | abeille
5 | abolir
6 | aborder
7 | aboutir
8 | aboyer
9 | abrasif
10 | abreuver
11 | abriter
12 | abroger
13 | abrupt
14 | absence
15 | absolu
16 | absurde
17 | abusif
18 | abyssal
19 | académie
20 | acajou
21 | acarien
22 | accabler
23 | accepter
24 | acclamer
25 | accolade
26 | accroche
27 | accuser
28 | acerbe
29 | achat
30 | acheter
31 | aciduler
32 | acier
33 | acompte
34 | acquérir
35 | acronyme
36 | acteur
37 | actif
38 | actuel
39 | adepte
40 | adéquat
41 | adhésif
42 | adjectif
43 | adjuger
44 | admettre
45 | admirer
46 | adopter
47 | adorer
48 | adoucir
49 | adresse
50 | adroit
51 | adulte
52 | adverbe
53 | aérer
54 | aéronef
55 | affaire
56 | affecter
57 | affiche
58 | affreux
59 | affubler
60 | agacer
61 | agencer
62 | agile
63 | agiter
64 | agrafer
65 | agréable
66 | agrume
67 | aider
68 | aiguille
69 | ailier
70 | aimable
71 | aisance
72 | ajouter
73 | ajuster
74 | alarmer
75 | alchimie
76 | alerte
77 | algèbre
78 | algue
79 | aliéner
80 | aliment
81 | alléger
82 | alliage
83 | allouer
84 | allumer
85 | alourdir
86 | alpaga
87 | altesse
88 | alvéole
89 | amateur
90 | ambigu
91 | ambre
92 | aménager
93 | amertume
94 | amidon
95 | amiral
96 | amorcer
97 | amour
98 | amovible
99 | amphibie
100 | ampleur
101 | amusant
102 | analyse
103 | anaphore
104 | anarchie
105 | anatomie
106 | ancien
107 | anéantir
108 | angle
109 | angoisse
110 | anguleux
111 | animal
112 | annexer
113 | annonce
114 | annuel
115 | anodin
116 | anomalie
117 | anonyme
118 | anormal
119 | antenne
120 | antidote
121 | anxieux
122 | apaiser
123 | apéritif
124 | aplanir
125 | apologie
126 | appareil
127 | appeler
128 | apporter
129 | appuyer
130 | aquarium
131 | aqueduc
132 | arbitre
133 | arbuste
134 | ardeur
135 | ardoise
136 | argent
137 | arlequin
138 | armature
139 | armement
140 | armoire
141 | armure
142 | arpenter
143 | arracher
144 | arriver
145 | arroser
146 | arsenic
147 | artériel
148 | article
149 | aspect
150 | asphalte
151 | aspirer
152 | assaut
153 | asservir
154 | assiette
155 | associer
156 | assurer
157 | asticot
158 | astre
159 | astuce
160 | atelier
161 | atome
162 | atrium
163 | atroce
164 | attaque
165 | attentif
166 | attirer
167 | attraper
168 | aubaine
169 | auberge
170 | audace
171 | audible
172 | augurer
173 | aurore
174 | automne
175 | autruche
176 | avaler
177 | avancer
178 | avarice
179 | avenir
180 | averse
181 | aveugle
182 | aviateur
183 | avide
184 | avion
185 | aviser
186 | avoine
187 | avouer
188 | avril
189 | axial
190 | axiome
191 | badge
192 | bafouer
193 | bagage
194 | baguette
195 | baignade
196 | balancer
197 | balcon
198 | baleine
199 | balisage
200 | bambin
201 | bancaire
202 | bandage
203 | banlieue
204 | bannière
205 | banquier
206 | barbier
207 | baril
208 | baron
209 | barque
210 | barrage
211 | bassin
212 | bastion
213 | bataille
214 | bateau
215 | batterie
216 | baudrier
217 | bavarder
218 | belette
219 | bélier
220 | belote
221 | bénéfice
222 | berceau
223 | berger
224 | berline
225 | bermuda
226 | besace
227 | besogne
228 | bétail
229 | beurre
230 | biberon
231 | bicycle
232 | bidule
233 | bijou
234 | bilan
235 | bilingue
236 | billard
237 | binaire
238 | biologie
239 | biopsie
240 | biotype
241 | biscuit
242 | bison
243 | bistouri
244 | bitume
245 | bizarre
246 | blafard
247 | blague
248 | blanchir
249 | blessant
250 | blinder
251 | blond
252 | bloquer
253 | blouson
254 | bobard
255 | bobine
256 | boire
257 | boiser
258 | bolide
259 | bonbon
260 | bondir
261 | bonheur
262 | bonifier
263 | bonus
264 | bordure
265 | borne
266 | botte
267 | boucle
268 | boueux
269 | bougie
270 | boulon
271 | bouquin
272 | bourse
273 | boussole
274 | boutique
275 | boxeur
276 | branche
277 | brasier
278 | brave
279 | brebis
280 | brèche
281 | breuvage
282 | bricoler
283 | brigade
284 | brillant
285 | brioche
286 | brique
287 | brochure
288 | broder
289 | bronzer
290 | brousse
291 | broyeur
292 | brume
293 | brusque
294 | brutal
295 | bruyant
296 | buffle
297 | buisson
298 | bulletin
299 | bureau
300 | burin
301 | bustier
302 | butiner
303 | butoir
304 | buvable
305 | buvette
306 | cabanon
307 | cabine
308 | cachette
309 | cadeau
310 | cadre
311 | caféine
312 | caillou
313 | caisson
314 | calculer
315 | calepin
316 | calibre
317 | calmer
318 | calomnie
319 | calvaire
320 | camarade
321 | caméra
322 | camion
323 | campagne
324 | canal
325 | caneton
326 | canon
327 | cantine
328 | canular
329 | capable
330 | caporal
331 | caprice
332 | capsule
333 | capter
334 | capuche
335 | carabine
336 | carbone
337 | caresser
338 | caribou
339 | carnage
340 | carotte
341 | carreau
342 | carton
343 | cascade
344 | casier
345 | casque
346 | cassure
347 | causer
348 | caution
349 | cavalier
350 | caverne
351 | caviar
352 | cédille
353 | ceinture
354 | céleste
355 | cellule
356 | cendrier
357 | censurer
358 | central
359 | cercle
360 | cérébral
361 | cerise
362 | cerner
363 | cerveau
364 | cesser
365 | chagrin
366 | chaise
367 | chaleur
368 | chambre
369 | chance
370 | chapitre
371 | charbon
372 | chasseur
373 | chaton
374 | chausson
375 | chavirer
376 | chemise
377 | chenille
378 | chéquier
379 | chercher
380 | cheval
381 | chien
382 | chiffre
383 | chignon
384 | chimère
385 | chiot
386 | chlorure
387 | chocolat
388 | choisir
389 | chose
390 | chouette
391 | chrome
392 | chute
393 | cigare
394 | cigogne
395 | cimenter
396 | cinéma
397 | cintrer
398 | circuler
399 | cirer
400 | cirque
401 | citerne
402 | citoyen
403 | citron
404 | civil
405 | clairon
406 | clameur
407 | claquer
408 | classe
409 | clavier
410 | client
411 | cligner
412 | climat
413 | clivage
414 | cloche
415 | clonage
416 | cloporte
417 | cobalt
418 | cobra
419 | cocasse
420 | cocotier
421 | coder
422 | codifier
423 | coffre
424 | cogner
425 | cohésion
426 | coiffer
427 | coincer
428 | colère
429 | colibri
430 | colline
431 | colmater
432 | colonel
433 | combat
434 | comédie
435 | commande
436 | compact
437 | concert
438 | conduire
439 | confier
440 | congeler
441 | connoter
442 | consonne
443 | contact
444 | convexe
445 | copain
446 | copie
447 | corail
448 | corbeau
449 | cordage
450 | corniche
451 | corpus
452 | correct
453 | cortège
454 | cosmique
455 | costume
456 | coton
457 | coude
458 | coupure
459 | courage
460 | couteau
461 | couvrir
462 | coyote
463 | crabe
464 | crainte
465 | cravate
466 | crayon
467 | créature
468 | créditer
469 | crémeux
470 | creuser
471 | crevette
472 | cribler
473 | crier
474 | cristal
475 | critère
476 | croire
477 | croquer
478 | crotale
479 | crucial
480 | cruel
481 | crypter
482 | cubique
483 | cueillir
484 | cuillère
485 | cuisine
486 | cuivre
487 | culminer
488 | cultiver
489 | cumuler
490 | cupide
491 | curatif
492 | curseur
493 | cyanure
494 | cycle
495 | cylindre
496 | cynique
497 | daigner
498 | damier
499 | danger
500 | danseur
501 | dauphin
502 | débattre
503 | débiter
504 | déborder
505 | débrider
506 | débutant
507 | décaler
508 | décembre
509 | déchirer
510 | décider
511 | déclarer
512 | décorer
513 | décrire
514 | décupler
515 | dédale
516 | déductif
517 | déesse
518 | défensif
519 | défiler
520 | défrayer
521 | dégager
522 | dégivrer
523 | déglutir
524 | dégrafer
525 | déjeuner
526 | délice
527 | déloger
528 | demander
529 | demeurer
530 | démolir
531 | dénicher
532 | dénouer
533 | dentelle
534 | dénuder
535 | départ
536 | dépenser
537 | déphaser
538 | déplacer
539 | déposer
540 | déranger
541 | dérober
542 | désastre
543 | descente
544 | désert
545 | désigner
546 | désobéir
547 | dessiner
548 | destrier
549 | détacher
550 | détester
551 | détourer
552 | détresse
553 | devancer
554 | devenir
555 | deviner
556 | devoir
557 | diable
558 | dialogue
559 | diamant
560 | dicter
561 | différer
562 | digérer
563 | digital
564 | digne
565 | diluer
566 | dimanche
567 | diminuer
568 | dioxyde
569 | directif
570 | diriger
571 | discuter
572 | disposer
573 | dissiper
574 | distance
575 | divertir
576 | diviser
577 | docile
578 | docteur
579 | dogme
580 | doigt
581 | domaine
582 | domicile
583 | dompter
584 | donateur
585 | donjon
586 | donner
587 | dopamine
588 | dortoir
589 | dorure
590 | dosage
591 | doseur
592 | dossier
593 | dotation
594 | douanier
595 | double
596 | douceur
597 | douter
598 | doyen
599 | dragon
600 | draper
601 | dresser
602 | dribbler
603 | droiture
604 | duperie
605 | duplexe
606 | durable
607 | durcir
608 | dynastie
609 | éblouir
610 | écarter
611 | écharpe
612 | échelle
613 | éclairer
614 | éclipse
615 | éclore
616 | écluse
617 | école
618 | économie
619 | écorce
620 | écouter
621 | écraser
622 | écrémer
623 | écrivain
624 | écrou
625 | écume
626 | écureuil
627 | édifier
628 | éduquer
629 | effacer
630 | effectif
631 | effigie
632 | effort
633 | effrayer
634 | effusion
635 | égaliser
636 | égarer
637 | éjecter
638 | élaborer
639 | élargir
640 | électron
641 | élégant
642 | éléphant
643 | élève
644 | éligible
645 | élitisme
646 | éloge
647 | élucider
648 | éluder
649 | emballer
650 | embellir
651 | embryon
652 | émeraude
653 | émission
654 | emmener
655 | émotion
656 | émouvoir
657 | empereur
658 | employer
659 | emporter
660 | emprise
661 | émulsion
662 | encadrer
663 | enchère
664 | enclave
665 | encoche
666 | endiguer
667 | endosser
668 | endroit
669 | enduire
670 | énergie
671 | enfance
672 | enfermer
673 | enfouir
674 | engager
675 | engin
676 | englober
677 | énigme
678 | enjamber
679 | enjeu
680 | enlever
681 | ennemi
682 | ennuyeux
683 | enrichir
684 | enrobage
685 | enseigne
686 | entasser
687 | entendre
688 | entier
689 | entourer
690 | entraver
691 | énumérer
692 | envahir
693 | enviable
694 | envoyer
695 | enzyme
696 | éolien
697 | épaissir
698 | épargne
699 | épatant
700 | épaule
701 | épicerie
702 | épidémie
703 | épier
704 | épilogue
705 | épine
706 | épisode
707 | épitaphe
708 | époque
709 | épreuve
710 | éprouver
711 | épuisant
712 | équerre
713 | équipe
714 | ériger
715 | érosion
716 | erreur
717 | éruption
718 | escalier
719 | espadon
720 | espèce
721 | espiègle
722 | espoir
723 | esprit
724 | esquiver
725 | essayer
726 | essence
727 | essieu
728 | essorer
729 | estime
730 | estomac
731 | estrade
732 | étagère
733 | étaler
734 | étanche
735 | étatique
736 | éteindre
737 | étendoir
738 | éternel
739 | éthanol
740 | éthique
741 | ethnie
742 | étirer
743 | étoffer
744 | étoile
745 | étonnant
746 | étourdir
747 | étrange
748 | étroit
749 | étude
750 | euphorie
751 | évaluer
752 | évasion
753 | éventail
754 | évidence
755 | éviter
756 | évolutif
757 | évoquer
758 | exact
759 | exagérer
760 | exaucer
761 | exceller
762 | excitant
763 | exclusif
764 | excuse
765 | exécuter
766 | exemple
767 | exercer
768 | exhaler
769 | exhorter
770 | exigence
771 | exiler
772 | exister
773 | exotique
774 | expédier
775 | explorer
776 | exposer
777 | exprimer
778 | exquis
779 | extensif
780 | extraire
781 | exulter
782 | fable
783 | fabuleux
784 | facette
785 | facile
786 | facture
787 | faiblir
788 | falaise
789 | fameux
790 | famille
791 | farceur
792 | farfelu
793 | farine
794 | farouche
795 | fasciner
796 | fatal
797 | fatigue
798 | faucon
799 | fautif
800 | faveur
801 | favori
802 | fébrile
803 | féconder
804 | fédérer
805 | félin
806 | femme
807 | fémur
808 | fendoir
809 | féodal
810 | fermer
811 | féroce
812 | ferveur
813 | festival
814 | feuille
815 | feutre
816 | février
817 | fiasco
818 | ficeler
819 | fictif
820 | fidèle
821 | figure
822 | filature
823 | filetage
824 | filière
825 | filleul
826 | filmer
827 | filou
828 | filtrer
829 | financer
830 | finir
831 | fiole
832 | firme
833 | fissure
834 | fixer
835 | flairer
836 | flamme
837 | flasque
838 | flatteur
839 | fléau
840 | flèche
841 | fleur
842 | flexion
843 | flocon
844 | flore
845 | fluctuer
846 | fluide
847 | fluvial
848 | folie
849 | fonderie
850 | fongible
851 | fontaine
852 | forcer
853 | forgeron
854 | formuler
855 | fortune
856 | fossile
857 | foudre
858 | fougère
859 | fouiller
860 | foulure
861 | fourmi
862 | fragile
863 | fraise
864 | franchir
865 | frapper
866 | frayeur
867 | frégate
868 | freiner
869 | frelon
870 | frémir
871 | frénésie
872 | frère
873 | friable
874 | friction
875 | frisson
876 | frivole
877 | froid
878 | fromage
879 | frontal
880 | frotter
881 | fruit
882 | fugitif
883 | fuite
884 | fureur
885 | furieux
886 | furtif
887 | fusion
888 | futur
889 | gagner
890 | galaxie
891 | galerie
892 | gambader
893 | garantir
894 | gardien
895 | garnir
896 | garrigue
897 | gazelle
898 | gazon
899 | géant
900 | gélatine
901 | gélule
902 | gendarme
903 | général
904 | génie
905 | genou
906 | gentil
907 | géologie
908 | géomètre
909 | géranium
910 | germe
911 | gestuel
912 | geyser
913 | gibier
914 | gicler
915 | girafe
916 | givre
917 | glace
918 | glaive
919 | glisser
920 | globe
921 | gloire
922 | glorieux
923 | golfeur
924 | gomme
925 | gonfler
926 | gorge
927 | gorille
928 | goudron
929 | gouffre
930 | goulot
931 | goupille
932 | gourmand
933 | goutte
934 | graduel
935 | graffiti
936 | graine
937 | grand
938 | grappin
939 | gratuit
940 | gravir
941 | grenat
942 | griffure
943 | griller
944 | grimper
945 | grogner
946 | gronder
947 | grotte
948 | groupe
949 | gruger
950 | grutier
951 | gruyère
952 | guépard
953 | guerrier
954 | guide
955 | guimauve
956 | guitare
957 | gustatif
958 | gymnaste
959 | gyrostat
960 | habitude
961 | hachoir
962 | halte
963 | hameau
964 | hangar
965 | hanneton
966 | haricot
967 | harmonie
968 | harpon
969 | hasard
970 | hélium
971 | hématome
972 | herbe
973 | hérisson
974 | hermine
975 | héron
976 | hésiter
977 | heureux
978 | hiberner
979 | hibou
980 | hilarant
981 | histoire
982 | hiver
983 | homard
984 | hommage
985 | homogène
986 | honneur
987 | honorer
988 | honteux
989 | horde
990 | horizon
991 | horloge
992 | hormone
993 | horrible
994 | houleux
995 | housse
996 | hublot
997 | huileux
998 | humain
999 | humble
1000 | humide
1001 | humour
1002 | hurler
1003 | hydromel
1004 | hygiène
1005 | hymne
1006 | hypnose
1007 | idylle
1008 | ignorer
1009 | iguane
1010 | illicite
1011 | illusion
1012 | image
1013 | imbiber
1014 | imiter
1015 | immense
1016 | immobile
1017 | immuable
1018 | impact
1019 | impérial
1020 | implorer
1021 | imposer
1022 | imprimer
1023 | imputer
1024 | incarner
1025 | incendie
1026 | incident
1027 | incliner
1028 | incolore
1029 | indexer
1030 | indice
1031 | inductif
1032 | inédit
1033 | ineptie
1034 | inexact
1035 | infini
1036 | infliger
1037 | informer
1038 | infusion
1039 | ingérer
1040 | inhaler
1041 | inhiber
1042 | injecter
1043 | injure
1044 | innocent
1045 | inoculer
1046 | inonder
1047 | inscrire
1048 | insecte
1049 | insigne
1050 | insolite
1051 | inspirer
1052 | instinct
1053 | insulter
1054 | intact
1055 | intense
1056 | intime
1057 | intrigue
1058 | intuitif
1059 | inutile
1060 | invasion
1061 | inventer
1062 | inviter
1063 | invoquer
1064 | ironique
1065 | irradier
1066 | irréel
1067 | irriter
1068 | isoler
1069 | ivoire
1070 | ivresse
1071 | jaguar
1072 | jaillir
1073 | jambe
1074 | janvier
1075 | jardin
1076 | jauger
1077 | jaune
1078 | javelot
1079 | jetable
1080 | jeton
1081 | jeudi
1082 | jeunesse
1083 | joindre
1084 | joncher
1085 | jongler
1086 | joueur
1087 | jouissif
1088 | journal
1089 | jovial
1090 | joyau
1091 | joyeux
1092 | jubiler
1093 | jugement
1094 | junior
1095 | jupon
1096 | juriste
1097 | justice
1098 | juteux
1099 | juvénile
1100 | kayak
1101 | kimono
1102 | kiosque
1103 | label
1104 | labial
1105 | labourer
1106 | lacérer
1107 | lactose
1108 | lagune
1109 | laine
1110 | laisser
1111 | laitier
1112 | lambeau
1113 | lamelle
1114 | lampe
1115 | lanceur
1116 | langage
1117 | lanterne
1118 | lapin
1119 | largeur
1120 | larme
1121 | laurier
1122 | lavabo
1123 | lavoir
1124 | lecture
1125 | légal
1126 | léger
1127 | légume
1128 | lessive
1129 | lettre
1130 | levier
1131 | lexique
1132 | lézard
1133 | liasse
1134 | libérer
1135 | libre
1136 | licence
1137 | licorne
1138 | liège
1139 | lièvre
1140 | ligature
1141 | ligoter
1142 | ligue
1143 | limer
1144 | limite
1145 | limonade
1146 | limpide
1147 | linéaire
1148 | lingot
1149 | lionceau
1150 | liquide
1151 | lisière
1152 | lister
1153 | lithium
1154 | litige
1155 | littoral
1156 | livreur
1157 | logique
1158 | lointain
1159 | loisir
1160 | lombric
1161 | loterie
1162 | louer
1163 | lourd
1164 | loutre
1165 | louve
1166 | loyal
1167 | lubie
1168 | lucide
1169 | lucratif
1170 | lueur
1171 | lugubre
1172 | luisant
1173 | lumière
1174 | lunaire
1175 | lundi
1176 | luron
1177 | lutter
1178 | luxueux
1179 | machine
1180 | magasin
1181 | magenta
1182 | magique
1183 | maigre
1184 | maillon
1185 | maintien
1186 | mairie
1187 | maison
1188 | majorer
1189 | malaxer
1190 | maléfice
1191 | malheur
1192 | malice
1193 | mallette
1194 | mammouth
1195 | mandater
1196 | maniable
1197 | manquant
1198 | manteau
1199 | manuel
1200 | marathon
1201 | marbre
1202 | marchand
1203 | mardi
1204 | maritime
1205 | marqueur
1206 | marron
1207 | marteler
1208 | mascotte
1209 | massif
1210 | matériel
1211 | matière
1212 | matraque
1213 | maudire
1214 | maussade
1215 | mauve
1216 | maximal
1217 | méchant
1218 | méconnu
1219 | médaille
1220 | médecin
1221 | méditer
1222 | méduse
1223 | meilleur
1224 | mélange
1225 | mélodie
1226 | membre
1227 | mémoire
1228 | menacer
1229 | mener
1230 | menhir
1231 | mensonge
1232 | mentor
1233 | mercredi
1234 | mérite
1235 | merle
1236 | messager
1237 | mesure
1238 | métal
1239 | météore
1240 | méthode
1241 | métier
1242 | meuble
1243 | miauler
1244 | microbe
1245 | miette
1246 | mignon
1247 | migrer
1248 | milieu
1249 | million
1250 | mimique
1251 | mince
1252 | minéral
1253 | minimal
1254 | minorer
1255 | minute
1256 | miracle
1257 | miroiter
1258 | missile
1259 | mixte
1260 | mobile
1261 | moderne
1262 | moelleux
1263 | mondial
1264 | moniteur
1265 | monnaie
1266 | monotone
1267 | monstre
1268 | montagne
1269 | monument
1270 | moqueur
1271 | morceau
1272 | morsure
1273 | mortier
1274 | moteur
1275 | motif
1276 | mouche
1277 | moufle
1278 | moulin
1279 | mousson
1280 | mouton
1281 | mouvant
1282 | multiple
1283 | munition
1284 | muraille
1285 | murène
1286 | murmure
1287 | muscle
1288 | muséum
1289 | musicien
1290 | mutation
1291 | muter
1292 | mutuel
1293 | myriade
1294 | myrtille
1295 | mystère
1296 | mythique
1297 | nageur
1298 | nappe
1299 | narquois
1300 | narrer
1301 | natation
1302 | nation
1303 | nature
1304 | naufrage
1305 | nautique
1306 | navire
1307 | nébuleux
1308 | nectar
1309 | néfaste
1310 | négation
1311 | négliger
1312 | négocier
1313 | neige
1314 | nerveux
1315 | nettoyer
1316 | neurone
1317 | neutron
1318 | neveu
1319 | niche
1320 | nickel
1321 | nitrate
1322 | niveau
1323 | noble
1324 | nocif
1325 | nocturne
1326 | noirceur
1327 | noisette
1328 | nomade
1329 | nombreux
1330 | nommer
1331 | normatif
1332 | notable
1333 | notifier
1334 | notoire
1335 | nourrir
1336 | nouveau
1337 | novateur
1338 | novembre
1339 | novice
1340 | nuage
1341 | nuancer
1342 | nuire
1343 | nuisible
1344 | numéro
1345 | nuptial
1346 | nuque
1347 | nutritif
1348 | obéir
1349 | objectif
1350 | obliger
1351 | obscur
1352 | observer
1353 | obstacle
1354 | obtenir
1355 | obturer
1356 | occasion
1357 | occuper
1358 | océan
1359 | octobre
1360 | octroyer
1361 | octupler
1362 | oculaire
1363 | odeur
1364 | odorant
1365 | offenser
1366 | officier
1367 | offrir
1368 | ogive
1369 | oiseau
1370 | oisillon
1371 | olfactif
1372 | olivier
1373 | ombrage
1374 | omettre
1375 | onctueux
1376 | onduler
1377 | onéreux
1378 | onirique
1379 | opale
1380 | opaque
1381 | opérer
1382 | opinion
1383 | opportun
1384 | opprimer
1385 | opter
1386 | optique
1387 | orageux
1388 | orange
1389 | orbite
1390 | ordonner
1391 | oreille
1392 | organe
1393 | orgueil
1394 | orifice
1395 | ornement
1396 | orque
1397 | ortie
1398 | osciller
1399 | osmose
1400 | ossature
1401 | otarie
1402 | ouragan
1403 | ourson
1404 | outil
1405 | outrager
1406 | ouvrage
1407 | ovation
1408 | oxyde
1409 | oxygène
1410 | ozone
1411 | paisible
1412 | palace
1413 | palmarès
1414 | palourde
1415 | palper
1416 | panache
1417 | panda
1418 | pangolin
1419 | paniquer
1420 | panneau
1421 | panorama
1422 | pantalon
1423 | papaye
1424 | papier
1425 | papoter
1426 | papyrus
1427 | paradoxe
1428 | parcelle
1429 | paresse
1430 | parfumer
1431 | parler
1432 | parole
1433 | parrain
1434 | parsemer
1435 | partager
1436 | parure
1437 | parvenir
1438 | passion
1439 | pastèque
1440 | paternel
1441 | patience
1442 | patron
1443 | pavillon
1444 | pavoiser
1445 | payer
1446 | paysage
1447 | peigne
1448 | peintre
1449 | pelage
1450 | pélican
1451 | pelle
1452 | pelouse
1453 | peluche
1454 | pendule
1455 | pénétrer
1456 | pénible
1457 | pensif
1458 | pénurie
1459 | pépite
1460 | péplum
1461 | perdrix
1462 | perforer
1463 | période
1464 | permuter
1465 | perplexe
1466 | persil
1467 | perte
1468 | peser
1469 | pétale
1470 | petit
1471 | pétrir
1472 | peuple
1473 | pharaon
1474 | phobie
1475 | phoque
1476 | photon
1477 | phrase
1478 | physique
1479 | piano
1480 | pictural
1481 | pièce
1482 | pierre
1483 | pieuvre
1484 | pilote
1485 | pinceau
1486 | pipette
1487 | piquer
1488 | pirogue
1489 | piscine
1490 | piston
1491 | pivoter
1492 | pixel
1493 | pizza
1494 | placard
1495 | plafond
1496 | plaisir
1497 | planer
1498 | plaque
1499 | plastron
1500 | plateau
1501 | pleurer
1502 | plexus
1503 | pliage
1504 | plomb
1505 | plonger
1506 | pluie
1507 | plumage
1508 | pochette
1509 | poésie
1510 | poète
1511 | pointe
1512 | poirier
1513 | poisson
1514 | poivre
1515 | polaire
1516 | policier
1517 | pollen
1518 | polygone
1519 | pommade
1520 | pompier
1521 | ponctuel
1522 | pondérer
1523 | poney
1524 | portique
1525 | position
1526 | posséder
1527 | posture
1528 | potager
1529 | poteau
1530 | potion
1531 | pouce
1532 | poulain
1533 | poumon
1534 | pourpre
1535 | poussin
1536 | pouvoir
1537 | prairie
1538 | pratique
1539 | précieux
1540 | prédire
1541 | préfixe
1542 | prélude
1543 | prénom
1544 | présence
1545 | prétexte
1546 | prévoir
1547 | primitif
1548 | prince
1549 | prison
1550 | priver
1551 | problème
1552 | procéder
1553 | prodige
1554 | profond
1555 | progrès
1556 | proie
1557 | projeter
1558 | prologue
1559 | promener
1560 | propre
1561 | prospère
1562 | protéger
1563 | prouesse
1564 | proverbe
1565 | prudence
1566 | pruneau
1567 | psychose
1568 | public
1569 | puceron
1570 | puiser
1571 | pulpe
1572 | pulsar
1573 | punaise
1574 | punitif
1575 | pupitre
1576 | purifier
1577 | puzzle
1578 | pyramide
1579 | quasar
1580 | querelle
1581 | question
1582 | quiétude
1583 | quitter
1584 | quotient
1585 | racine
1586 | raconter
1587 | radieux
1588 | ragondin
1589 | raideur
1590 | raisin
1591 | ralentir
1592 | rallonge
1593 | ramasser
1594 | rapide
1595 | rasage
1596 | ratisser
1597 | ravager
1598 | ravin
1599 | rayonner
1600 | réactif
1601 | réagir
1602 | réaliser
1603 | réanimer
1604 | recevoir
1605 | réciter
1606 | réclamer
1607 | récolter
1608 | recruter
1609 | reculer
1610 | recycler
1611 | rédiger
1612 | redouter
1613 | refaire
1614 | réflexe
1615 | réformer
1616 | refrain
1617 | refuge
1618 | régalien
1619 | région
1620 | réglage
1621 | régulier
1622 | réitérer
1623 | rejeter
1624 | rejouer
1625 | relatif
1626 | relever
1627 | relief
1628 | remarque
1629 | remède
1630 | remise
1631 | remonter
1632 | remplir
1633 | remuer
1634 | renard
1635 | renfort
1636 | renifler
1637 | renoncer
1638 | rentrer
1639 | renvoi
1640 | replier
1641 | reporter
1642 | reprise
1643 | reptile
1644 | requin
1645 | réserve
1646 | résineux
1647 | résoudre
1648 | respect
1649 | rester
1650 | résultat
1651 | rétablir
1652 | retenir
1653 | réticule
1654 | retomber
1655 | retracer
1656 | réunion
1657 | réussir
1658 | revanche
1659 | revivre
1660 | révolte
1661 | révulsif
1662 | richesse
1663 | rideau
1664 | rieur
1665 | rigide
1666 | rigoler
1667 | rincer
1668 | riposter
1669 | risible
1670 | risque
1671 | rituel
1672 | rival
1673 | rivière
1674 | rocheux
1675 | romance
1676 | rompre
1677 | ronce
1678 | rondin
1679 | roseau
1680 | rosier
1681 | rotatif
1682 | rotor
1683 | rotule
1684 | rouge
1685 | rouille
1686 | rouleau
1687 | routine
1688 | royaume
1689 | ruban
1690 | rubis
1691 | ruche
1692 | ruelle
1693 | rugueux
1694 | ruiner
1695 | ruisseau
1696 | ruser
1697 | rustique
1698 | rythme
1699 | sabler
1700 | saboter
1701 | sabre
1702 | sacoche
1703 | safari
1704 | sagesse
1705 | saisir
1706 | salade
1707 | salive
1708 | salon
1709 | saluer
1710 | samedi
1711 | sanction
1712 | sanglier
1713 | sarcasme
1714 | sardine
1715 | saturer
1716 | saugrenu
1717 | saumon
1718 | sauter
1719 | sauvage
1720 | savant
1721 | savonner
1722 | scalpel
1723 | scandale
1724 | scélérat
1725 | scénario
1726 | sceptre
1727 | schéma
1728 | science
1729 | scinder
1730 | score
1731 | scrutin
1732 | sculpter
1733 | séance
1734 | sécable
1735 | sécher
1736 | secouer
1737 | sécréter
1738 | sédatif
1739 | séduire
1740 | seigneur
1741 | séjour
1742 | sélectif
1743 | semaine
1744 | sembler
1745 | semence
1746 | séminal
1747 | sénateur
1748 | sensible
1749 | sentence
1750 | séparer
1751 | séquence
1752 | serein
1753 | sergent
1754 | sérieux
1755 | serrure
1756 | sérum
1757 | service
1758 | sésame
1759 | sévir
1760 | sevrage
1761 | sextuple
1762 | sidéral
1763 | siècle
1764 | siéger
1765 | siffler
1766 | sigle
1767 | signal
1768 | silence
1769 | silicium
1770 | simple
1771 | sincère
1772 | sinistre
1773 | siphon
1774 | sirop
1775 | sismique
1776 | situer
1777 | skier
1778 | social
1779 | socle
1780 | sodium
1781 | soigneux
1782 | soldat
1783 | soleil
1784 | solitude
1785 | soluble
1786 | sombre
1787 | sommeil
1788 | somnoler
1789 | sonde
1790 | songeur
1791 | sonnette
1792 | sonore
1793 | sorcier
1794 | sortir
1795 | sosie
1796 | sottise
1797 | soucieux
1798 | soudure
1799 | souffle
1800 | soulever
1801 | soupape
1802 | source
1803 | soutirer
1804 | souvenir
1805 | spacieux
1806 | spatial
1807 | spécial
1808 | sphère
1809 | spiral
1810 | stable
1811 | station
1812 | sternum
1813 | stimulus
1814 | stipuler
1815 | strict
1816 | studieux
1817 | stupeur
1818 | styliste
1819 | sublime
1820 | substrat
1821 | subtil
1822 | subvenir
1823 | succès
1824 | sucre
1825 | suffixe
1826 | suggérer
1827 | suiveur
1828 | sulfate
1829 | superbe
1830 | supplier
1831 | surface
1832 | suricate
1833 | surmener
1834 | surprise
1835 | sursaut
1836 | survie
1837 | suspect
1838 | syllabe
1839 | symbole
1840 | symétrie
1841 | synapse
1842 | syntaxe
1843 | système
1844 | tabac
1845 | tablier
1846 | tactile
1847 | tailler
1848 | talent
1849 | talisman
1850 | talonner
1851 | tambour
1852 | tamiser
1853 | tangible
1854 | tapis
1855 | taquiner
1856 | tarder
1857 | tarif
1858 | tartine
1859 | tasse
1860 | tatami
1861 | tatouage
1862 | taupe
1863 | taureau
1864 | taxer
1865 | témoin
1866 | temporel
1867 | tenaille
1868 | tendre
1869 | teneur
1870 | tenir
1871 | tension
1872 | terminer
1873 | terne
1874 | terrible
1875 | tétine
1876 | texte
1877 | thème
1878 | théorie
1879 | thérapie
1880 | thorax
1881 | tibia
1882 | tiède
1883 | timide
1884 | tirelire
1885 | tiroir
1886 | tissu
1887 | titane
1888 | titre
1889 | tituber
1890 | toboggan
1891 | tolérant
1892 | tomate
1893 | tonique
1894 | tonneau
1895 | toponyme
1896 | torche
1897 | tordre
1898 | tornade
1899 | torpille
1900 | torrent
1901 | torse
1902 | tortue
1903 | totem
1904 | toucher
1905 | tournage
1906 | tousser
1907 | toxine
1908 | traction
1909 | trafic
1910 | tragique
1911 | trahir
1912 | train
1913 | trancher
1914 | travail
1915 | trèfle
1916 | tremper
1917 | trésor
1918 | treuil
1919 | triage
1920 | tribunal
1921 | tricoter
1922 | trilogie
1923 | triomphe
1924 | tripler
1925 | triturer
1926 | trivial
1927 | trombone
1928 | tronc
1929 | tropical
1930 | troupeau
1931 | tuile
1932 | tulipe
1933 | tumulte
1934 | tunnel
1935 | turbine
1936 | tuteur
1937 | tutoyer
1938 | tuyau
1939 | tympan
1940 | typhon
1941 | typique
1942 | tyran
1943 | ubuesque
1944 | ultime
1945 | ultrason
1946 | unanime
1947 | unifier
1948 | union
1949 | unique
1950 | unitaire
1951 | univers
1952 | uranium
1953 | urbain
1954 | urticant
1955 | usage
1956 | usine
1957 | usuel
1958 | usure
1959 | utile
1960 | utopie
1961 | vacarme
1962 | vaccin
1963 | vagabond
1964 | vague
1965 | vaillant
1966 | vaincre
1967 | vaisseau
1968 | valable
1969 | valise
1970 | vallon
1971 | valve
1972 | vampire
1973 | vanille
1974 | vapeur
1975 | varier
1976 | vaseux
1977 | vassal
1978 | vaste
1979 | vecteur
1980 | vedette
1981 | végétal
1982 | véhicule
1983 | veinard
1984 | véloce
1985 | vendredi
1986 | vénérer
1987 | venger
1988 | venimeux
1989 | ventouse
1990 | verdure
1991 | vérin
1992 | vernir
1993 | verrou
1994 | verser
1995 | vertu
1996 | veston
1997 | vétéran
1998 | vétuste
1999 | vexant
2000 | vexer
2001 | viaduc
2002 | viande
2003 | victoire
2004 | vidange
2005 | vidéo
2006 | vignette
2007 | vigueur
2008 | vilain
2009 | village
2010 | vinaigre
2011 | violon
2012 | vipère
2013 | virement
2014 | virtuose
2015 | virus
2016 | visage
2017 | viseur
2018 | vision
2019 | visqueux
2020 | visuel
2021 | vital
2022 | vitesse
2023 | viticole
2024 | vitrine
2025 | vivace
2026 | vivipare
2027 | vocation
2028 | voguer
2029 | voile
2030 | voisin
2031 | voiture
2032 | volaille
2033 | volcan
2034 | voltiger
2035 | volume
2036 | vorace
2037 | vortex
2038 | voter
2039 | vouloir
2040 | voyage
2041 | voyelle
2042 | wagon
2043 | xénon
2044 | yacht
2045 | zèbre
2046 | zénith
2047 | zeste
2048 | zoologie
--------------------------------------------------------------------------------
/src/main/resources/wordlists/japanese.txt:
--------------------------------------------------------------------------------
1 | あいこくしん
2 | あいさつ
3 | あいだ
4 | あおぞら
5 | あかちゃん
6 | あきる
7 | あけがた
8 | あける
9 | あこがれる
10 | あさい
11 | あさひ
12 | あしあと
13 | あじわう
14 | あずかる
15 | あずき
16 | あそぶ
17 | あたえる
18 | あたためる
19 | あたりまえ
20 | あたる
21 | あつい
22 | あつかう
23 | あっしゅく
24 | あつまり
25 | あつめる
26 | あてな
27 | あてはまる
28 | あひる
29 | あぶら
30 | あぶる
31 | あふれる
32 | あまい
33 | あまど
34 | あまやかす
35 | あまり
36 | あみもの
37 | あめりか
38 | あやまる
39 | あゆむ
40 | あらいぐま
41 | あらし
42 | あらすじ
43 | あらためる
44 | あらゆる
45 | あらわす
46 | ありがとう
47 | あわせる
48 | あわてる
49 | あんい
50 | あんがい
51 | あんこ
52 | あんぜん
53 | あんてい
54 | あんない
55 | あんまり
56 | いいだす
57 | いおん
58 | いがい
59 | いがく
60 | いきおい
61 | いきなり
62 | いきもの
63 | いきる
64 | いくじ
65 | いくぶん
66 | いけばな
67 | いけん
68 | いこう
69 | いこく
70 | いこつ
71 | いさましい
72 | いさん
73 | いしき
74 | いじゅう
75 | いじょう
76 | いじわる
77 | いずみ
78 | いずれ
79 | いせい
80 | いせえび
81 | いせかい
82 | いせき
83 | いぜん
84 | いそうろう
85 | いそがしい
86 | いだい
87 | いだく
88 | いたずら
89 | いたみ
90 | いたりあ
91 | いちおう
92 | いちじ
93 | いちど
94 | いちば
95 | いちぶ
96 | いちりゅう
97 | いつか
98 | いっしゅん
99 | いっせい
100 | いっそう
101 | いったん
102 | いっち
103 | いってい
104 | いっぽう
105 | いてざ
106 | いてん
107 | いどう
108 | いとこ
109 | いない
110 | いなか
111 | いねむり
112 | いのち
113 | いのる
114 | いはつ
115 | いばる
116 | いはん
117 | いびき
118 | いひん
119 | いふく
120 | いへん
121 | いほう
122 | いみん
123 | いもうと
124 | いもたれ
125 | いもり
126 | いやがる
127 | いやす
128 | いよかん
129 | いよく
130 | いらい
131 | いらすと
132 | いりぐち
133 | いりょう
134 | いれい
135 | いれもの
136 | いれる
137 | いろえんぴつ
138 | いわい
139 | いわう
140 | いわかん
141 | いわば
142 | いわゆる
143 | いんげんまめ
144 | いんさつ
145 | いんしょう
146 | いんよう
147 | うえき
148 | うえる
149 | うおざ
150 | うがい
151 | うかぶ
152 | うかべる
153 | うきわ
154 | うくらいな
155 | うくれれ
156 | うけたまわる
157 | うけつけ
158 | うけとる
159 | うけもつ
160 | うける
161 | うごかす
162 | うごく
163 | うこん
164 | うさぎ
165 | うしなう
166 | うしろがみ
167 | うすい
168 | うすぎ
169 | うすぐらい
170 | うすめる
171 | うせつ
172 | うちあわせ
173 | うちがわ
174 | うちき
175 | うちゅう
176 | うっかり
177 | うつくしい
178 | うったえる
179 | うつる
180 | うどん
181 | うなぎ
182 | うなじ
183 | うなずく
184 | うなる
185 | うねる
186 | うのう
187 | うぶげ
188 | うぶごえ
189 | うまれる
190 | うめる
191 | うもう
192 | うやまう
193 | うよく
194 | うらがえす
195 | うらぐち
196 | うらない
197 | うりあげ
198 | うりきれ
199 | うるさい
200 | うれしい
201 | うれゆき
202 | うれる
203 | うろこ
204 | うわき
205 | うわさ
206 | うんこう
207 | うんちん
208 | うんてん
209 | うんどう
210 | えいえん
211 | えいが
212 | えいきょう
213 | えいご
214 | えいせい
215 | えいぶん
216 | えいよう
217 | えいわ
218 | えおり
219 | えがお
220 | えがく
221 | えきたい
222 | えくせる
223 | えしゃく
224 | えすて
225 | えつらん
226 | えのぐ
227 | えほうまき
228 | えほん
229 | えまき
230 | えもじ
231 | えもの
232 | えらい
233 | えらぶ
234 | えりあ
235 | えんえん
236 | えんかい
237 | えんぎ
238 | えんげき
239 | えんしゅう
240 | えんぜつ
241 | えんそく
242 | えんちょう
243 | えんとつ
244 | おいかける
245 | おいこす
246 | おいしい
247 | おいつく
248 | おうえん
249 | おうさま
250 | おうじ
251 | おうせつ
252 | おうたい
253 | おうふく
254 | おうべい
255 | おうよう
256 | おえる
257 | おおい
258 | おおう
259 | おおどおり
260 | おおや
261 | おおよそ
262 | おかえり
263 | おかず
264 | おがむ
265 | おかわり
266 | おぎなう
267 | おきる
268 | おくさま
269 | おくじょう
270 | おくりがな
271 | おくる
272 | おくれる
273 | おこす
274 | おこなう
275 | おこる
276 | おさえる
277 | おさない
278 | おさめる
279 | おしいれ
280 | おしえる
281 | おじぎ
282 | おじさん
283 | おしゃれ
284 | おそらく
285 | おそわる
286 | おたがい
287 | おたく
288 | おだやか
289 | おちつく
290 | おっと
291 | おつり
292 | おでかけ
293 | おとしもの
294 | おとなしい
295 | おどり
296 | おどろかす
297 | おばさん
298 | おまいり
299 | おめでとう
300 | おもいで
301 | おもう
302 | おもたい
303 | おもちゃ
304 | おやつ
305 | おやゆび
306 | およぼす
307 | おらんだ
308 | おろす
309 | おんがく
310 | おんけい
311 | おんしゃ
312 | おんせん
313 | おんだん
314 | おんちゅう
315 | おんどけい
316 | かあつ
317 | かいが
318 | がいき
319 | がいけん
320 | がいこう
321 | かいさつ
322 | かいしゃ
323 | かいすいよく
324 | かいぜん
325 | かいぞうど
326 | かいつう
327 | かいてん
328 | かいとう
329 | かいふく
330 | がいへき
331 | かいほう
332 | かいよう
333 | がいらい
334 | かいわ
335 | かえる
336 | かおり
337 | かかえる
338 | かがく
339 | かがし
340 | かがみ
341 | かくご
342 | かくとく
343 | かざる
344 | がぞう
345 | かたい
346 | かたち
347 | がちょう
348 | がっきゅう
349 | がっこう
350 | がっさん
351 | がっしょう
352 | かなざわし
353 | かのう
354 | がはく
355 | かぶか
356 | かほう
357 | かほご
358 | かまう
359 | かまぼこ
360 | かめれおん
361 | かゆい
362 | かようび
363 | からい
364 | かるい
365 | かろう
366 | かわく
367 | かわら
368 | がんか
369 | かんけい
370 | かんこう
371 | かんしゃ
372 | かんそう
373 | かんたん
374 | かんち
375 | がんばる
376 | きあい
377 | きあつ
378 | きいろ
379 | ぎいん
380 | きうい
381 | きうん
382 | きえる
383 | きおう
384 | きおく
385 | きおち
386 | きおん
387 | きかい
388 | きかく
389 | きかんしゃ
390 | ききて
391 | きくばり
392 | きくらげ
393 | きけんせい
394 | きこう
395 | きこえる
396 | きこく
397 | きさい
398 | きさく
399 | きさま
400 | きさらぎ
401 | ぎじかがく
402 | ぎしき
403 | ぎじたいけん
404 | ぎじにってい
405 | ぎじゅつしゃ
406 | きすう
407 | きせい
408 | きせき
409 | きせつ
410 | きそう
411 | きぞく
412 | きぞん
413 | きたえる
414 | きちょう
415 | きつえん
416 | ぎっちり
417 | きつつき
418 | きつね
419 | きてい
420 | きどう
421 | きどく
422 | きない
423 | きなが
424 | きなこ
425 | きぬごし
426 | きねん
427 | きのう
428 | きのした
429 | きはく
430 | きびしい
431 | きひん
432 | きふく
433 | きぶん
434 | きぼう
435 | きほん
436 | きまる
437 | きみつ
438 | きむずかしい
439 | きめる
440 | きもだめし
441 | きもち
442 | きもの
443 | きゃく
444 | きやく
445 | ぎゅうにく
446 | きよう
447 | きょうりゅう
448 | きらい
449 | きらく
450 | きりん
451 | きれい
452 | きれつ
453 | きろく
454 | ぎろん
455 | きわめる
456 | ぎんいろ
457 | きんかくじ
458 | きんじょ
459 | きんようび
460 | ぐあい
461 | くいず
462 | くうかん
463 | くうき
464 | くうぐん
465 | くうこう
466 | ぐうせい
467 | くうそう
468 | ぐうたら
469 | くうふく
470 | くうぼ
471 | くかん
472 | くきょう
473 | くげん
474 | ぐこう
475 | くさい
476 | くさき
477 | くさばな
478 | くさる
479 | くしゃみ
480 | くしょう
481 | くすのき
482 | くすりゆび
483 | くせげ
484 | くせん
485 | ぐたいてき
486 | くださる
487 | くたびれる
488 | くちこみ
489 | くちさき
490 | くつした
491 | ぐっすり
492 | くつろぐ
493 | くとうてん
494 | くどく
495 | くなん
496 | くねくね
497 | くのう
498 | くふう
499 | くみあわせ
500 | くみたてる
501 | くめる
502 | くやくしょ
503 | くらす
504 | くらべる
505 | くるま
506 | くれる
507 | くろう
508 | くわしい
509 | ぐんかん
510 | ぐんしょく
511 | ぐんたい
512 | ぐんて
513 | けあな
514 | けいかく
515 | けいけん
516 | けいこ
517 | けいさつ
518 | げいじゅつ
519 | けいたい
520 | げいのうじん
521 | けいれき
522 | けいろ
523 | けおとす
524 | けおりもの
525 | げきか
526 | げきげん
527 | げきだん
528 | げきちん
529 | げきとつ
530 | げきは
531 | げきやく
532 | げこう
533 | げこくじょう
534 | げざい
535 | けさき
536 | げざん
537 | けしき
538 | けしごむ
539 | けしょう
540 | げすと
541 | けたば
542 | けちゃっぷ
543 | けちらす
544 | けつあつ
545 | けつい
546 | けつえき
547 | けっこん
548 | けつじょ
549 | けっせき
550 | けってい
551 | けつまつ
552 | げつようび
553 | げつれい
554 | けつろん
555 | げどく
556 | けとばす
557 | けとる
558 | けなげ
559 | けなす
560 | けなみ
561 | けぬき
562 | げねつ
563 | けねん
564 | けはい
565 | げひん
566 | けぶかい
567 | げぼく
568 | けまり
569 | けみかる
570 | けむし
571 | けむり
572 | けもの
573 | けらい
574 | けろけろ
575 | けわしい
576 | けんい
577 | けんえつ
578 | けんお
579 | けんか
580 | げんき
581 | けんげん
582 | けんこう
583 | けんさく
584 | けんしゅう
585 | けんすう
586 | げんそう
587 | けんちく
588 | けんてい
589 | けんとう
590 | けんない
591 | けんにん
592 | げんぶつ
593 | けんま
594 | けんみん
595 | けんめい
596 | けんらん
597 | けんり
598 | こあくま
599 | こいぬ
600 | こいびと
601 | ごうい
602 | こうえん
603 | こうおん
604 | こうかん
605 | ごうきゅう
606 | ごうけい
607 | こうこう
608 | こうさい
609 | こうじ
610 | こうすい
611 | ごうせい
612 | こうそく
613 | こうたい
614 | こうちゃ
615 | こうつう
616 | こうてい
617 | こうどう
618 | こうない
619 | こうはい
620 | ごうほう
621 | ごうまん
622 | こうもく
623 | こうりつ
624 | こえる
625 | こおり
626 | ごかい
627 | ごがつ
628 | ごかん
629 | こくご
630 | こくさい
631 | こくとう
632 | こくない
633 | こくはく
634 | こぐま
635 | こけい
636 | こける
637 | ここのか
638 | こころ
639 | こさめ
640 | こしつ
641 | こすう
642 | こせい
643 | こせき
644 | こぜん
645 | こそだて
646 | こたい
647 | こたえる
648 | こたつ
649 | こちょう
650 | こっか
651 | こつこつ
652 | こつばん
653 | こつぶ
654 | こてい
655 | こてん
656 | ことがら
657 | ことし
658 | ことば
659 | ことり
660 | こなごな
661 | こねこね
662 | このまま
663 | このみ
664 | このよ
665 | ごはん
666 | こひつじ
667 | こふう
668 | こふん
669 | こぼれる
670 | ごまあぶら
671 | こまかい
672 | ごますり
673 | こまつな
674 | こまる
675 | こむぎこ
676 | こもじ
677 | こもち
678 | こもの
679 | こもん
680 | こやく
681 | こやま
682 | こゆう
683 | こゆび
684 | こよい
685 | こよう
686 | こりる
687 | これくしょん
688 | ころっけ
689 | こわもて
690 | こわれる
691 | こんいん
692 | こんかい
693 | こんき
694 | こんしゅう
695 | こんすい
696 | こんだて
697 | こんとん
698 | こんなん
699 | こんびに
700 | こんぽん
701 | こんまけ
702 | こんや
703 | こんれい
704 | こんわく
705 | ざいえき
706 | さいかい
707 | さいきん
708 | ざいげん
709 | ざいこ
710 | さいしょ
711 | さいせい
712 | ざいたく
713 | ざいちゅう
714 | さいてき
715 | ざいりょう
716 | さうな
717 | さかいし
718 | さがす
719 | さかな
720 | さかみち
721 | さがる
722 | さぎょう
723 | さくし
724 | さくひん
725 | さくら
726 | さこく
727 | さこつ
728 | さずかる
729 | ざせき
730 | さたん
731 | さつえい
732 | ざつおん
733 | ざっか
734 | ざつがく
735 | さっきょく
736 | ざっし
737 | さつじん
738 | ざっそう
739 | さつたば
740 | さつまいも
741 | さてい
742 | さといも
743 | さとう
744 | さとおや
745 | さとし
746 | さとる
747 | さのう
748 | さばく
749 | さびしい
750 | さべつ
751 | さほう
752 | さほど
753 | さます
754 | さみしい
755 | さみだれ
756 | さむけ
757 | さめる
758 | さやえんどう
759 | さゆう
760 | さよう
761 | さよく
762 | さらだ
763 | ざるそば
764 | さわやか
765 | さわる
766 | さんいん
767 | さんか
768 | さんきゃく
769 | さんこう
770 | さんさい
771 | ざんしょ
772 | さんすう
773 | さんせい
774 | さんそ
775 | さんち
776 | さんま
777 | さんみ
778 | さんらん
779 | しあい
780 | しあげ
781 | しあさって
782 | しあわせ
783 | しいく
784 | しいん
785 | しうち
786 | しえい
787 | しおけ
788 | しかい
789 | しかく
790 | じかん
791 | しごと
792 | しすう
793 | じだい
794 | したうけ
795 | したぎ
796 | したて
797 | したみ
798 | しちょう
799 | しちりん
800 | しっかり
801 | しつじ
802 | しつもん
803 | してい
804 | してき
805 | してつ
806 | じてん
807 | じどう
808 | しなぎれ
809 | しなもの
810 | しなん
811 | しねま
812 | しねん
813 | しのぐ
814 | しのぶ
815 | しはい
816 | しばかり
817 | しはつ
818 | しはらい
819 | しはん
820 | しひょう
821 | しふく
822 | じぶん
823 | しへい
824 | しほう
825 | しほん
826 | しまう
827 | しまる
828 | しみん
829 | しむける
830 | じむしょ
831 | しめい
832 | しめる
833 | しもん
834 | しゃいん
835 | しゃうん
836 | しゃおん
837 | じゃがいも
838 | しやくしょ
839 | しゃくほう
840 | しゃけん
841 | しゃこ
842 | しゃざい
843 | しゃしん
844 | しゃせん
845 | しゃそう
846 | しゃたい
847 | しゃちょう
848 | しゃっきん
849 | じゃま
850 | しゃりん
851 | しゃれい
852 | じゆう
853 | じゅうしょ
854 | しゅくはく
855 | じゅしん
856 | しゅっせき
857 | しゅみ
858 | しゅらば
859 | じゅんばん
860 | しょうかい
861 | しょくたく
862 | しょっけん
863 | しょどう
864 | しょもつ
865 | しらせる
866 | しらべる
867 | しんか
868 | しんこう
869 | じんじゃ
870 | しんせいじ
871 | しんちく
872 | しんりん
873 | すあげ
874 | すあし
875 | すあな
876 | ずあん
877 | すいえい
878 | すいか
879 | すいとう
880 | ずいぶん
881 | すいようび
882 | すうがく
883 | すうじつ
884 | すうせん
885 | すおどり
886 | すきま
887 | すくう
888 | すくない
889 | すける
890 | すごい
891 | すこし
892 | ずさん
893 | すずしい
894 | すすむ
895 | すすめる
896 | すっかり
897 | ずっしり
898 | ずっと
899 | すてき
900 | すてる
901 | すねる
902 | すのこ
903 | すはだ
904 | すばらしい
905 | ずひょう
906 | ずぶぬれ
907 | すぶり
908 | すふれ
909 | すべて
910 | すべる
911 | ずほう
912 | すぼん
913 | すまい
914 | すめし
915 | すもう
916 | すやき
917 | すらすら
918 | するめ
919 | すれちがう
920 | すろっと
921 | すわる
922 | すんぜん
923 | すんぽう
924 | せあぶら
925 | せいかつ
926 | せいげん
927 | せいじ
928 | せいよう
929 | せおう
930 | せかいかん
931 | せきにん
932 | せきむ
933 | せきゆ
934 | せきらんうん
935 | せけん
936 | せこう
937 | せすじ
938 | せたい
939 | せたけ
940 | せっかく
941 | せっきゃく
942 | ぜっく
943 | せっけん
944 | せっこつ
945 | せっさたくま
946 | せつぞく
947 | せつだん
948 | せつでん
949 | せっぱん
950 | せつび
951 | せつぶん
952 | せつめい
953 | せつりつ
954 | せなか
955 | せのび
956 | せはば
957 | せびろ
958 | せぼね
959 | せまい
960 | せまる
961 | せめる
962 | せもたれ
963 | せりふ
964 | ぜんあく
965 | せんい
966 | せんえい
967 | せんか
968 | せんきょ
969 | せんく
970 | せんげん
971 | ぜんご
972 | せんさい
973 | せんしゅ
974 | せんすい
975 | せんせい
976 | せんぞ
977 | せんたく
978 | せんちょう
979 | せんてい
980 | せんとう
981 | せんぬき
982 | せんねん
983 | せんぱい
984 | ぜんぶ
985 | ぜんぽう
986 | せんむ
987 | せんめんじょ
988 | せんもん
989 | せんやく
990 | せんゆう
991 | せんよう
992 | ぜんら
993 | ぜんりゃく
994 | せんれい
995 | せんろ
996 | そあく
997 | そいとげる
998 | そいね
999 | そうがんきょう
1000 | そうき
1001 | そうご
1002 | そうしん
1003 | そうだん
1004 | そうなん
1005 | そうび
1006 | そうめん
1007 | そうり
1008 | そえもの
1009 | そえん
1010 | そがい
1011 | そげき
1012 | そこう
1013 | そこそこ
1014 | そざい
1015 | そしな
1016 | そせい
1017 | そせん
1018 | そそぐ
1019 | そだてる
1020 | そつう
1021 | そつえん
1022 | そっかん
1023 | そつぎょう
1024 | そっけつ
1025 | そっこう
1026 | そっせん
1027 | そっと
1028 | そとがわ
1029 | そとづら
1030 | そなえる
1031 | そなた
1032 | そふぼ
1033 | そぼく
1034 | そぼろ
1035 | そまつ
1036 | そまる
1037 | そむく
1038 | そむりえ
1039 | そめる
1040 | そもそも
1041 | そよかぜ
1042 | そらまめ
1043 | そろう
1044 | そんかい
1045 | そんけい
1046 | そんざい
1047 | そんしつ
1048 | そんぞく
1049 | そんちょう
1050 | ぞんび
1051 | ぞんぶん
1052 | そんみん
1053 | たあい
1054 | たいいん
1055 | たいうん
1056 | たいえき
1057 | たいおう
1058 | だいがく
1059 | たいき
1060 | たいぐう
1061 | たいけん
1062 | たいこ
1063 | たいざい
1064 | だいじょうぶ
1065 | だいすき
1066 | たいせつ
1067 | たいそう
1068 | だいたい
1069 | たいちょう
1070 | たいてい
1071 | だいどころ
1072 | たいない
1073 | たいねつ
1074 | たいのう
1075 | たいはん
1076 | だいひょう
1077 | たいふう
1078 | たいへん
1079 | たいほ
1080 | たいまつばな
1081 | たいみんぐ
1082 | たいむ
1083 | たいめん
1084 | たいやき
1085 | たいよう
1086 | たいら
1087 | たいりょく
1088 | たいる
1089 | たいわん
1090 | たうえ
1091 | たえる
1092 | たおす
1093 | たおる
1094 | たおれる
1095 | たかい
1096 | たかね
1097 | たきび
1098 | たくさん
1099 | たこく
1100 | たこやき
1101 | たさい
1102 | たしざん
1103 | だじゃれ
1104 | たすける
1105 | たずさわる
1106 | たそがれ
1107 | たたかう
1108 | たたく
1109 | ただしい
1110 | たたみ
1111 | たちばな
1112 | だっかい
1113 | だっきゃく
1114 | だっこ
1115 | だっしゅつ
1116 | だったい
1117 | たてる
1118 | たとえる
1119 | たなばた
1120 | たにん
1121 | たぬき
1122 | たのしみ
1123 | たはつ
1124 | たぶん
1125 | たべる
1126 | たぼう
1127 | たまご
1128 | たまる
1129 | だむる
1130 | ためいき
1131 | ためす
1132 | ためる
1133 | たもつ
1134 | たやすい
1135 | たよる
1136 | たらす
1137 | たりきほんがん
1138 | たりょう
1139 | たりる
1140 | たると
1141 | たれる
1142 | たれんと
1143 | たろっと
1144 | たわむれる
1145 | だんあつ
1146 | たんい
1147 | たんおん
1148 | たんか
1149 | たんき
1150 | たんけん
1151 | たんご
1152 | たんさん
1153 | たんじょうび
1154 | だんせい
1155 | たんそく
1156 | たんたい
1157 | だんち
1158 | たんてい
1159 | たんとう
1160 | だんな
1161 | たんにん
1162 | だんねつ
1163 | たんのう
1164 | たんぴん
1165 | だんぼう
1166 | たんまつ
1167 | たんめい
1168 | だんれつ
1169 | だんろ
1170 | だんわ
1171 | ちあい
1172 | ちあん
1173 | ちいき
1174 | ちいさい
1175 | ちえん
1176 | ちかい
1177 | ちから
1178 | ちきゅう
1179 | ちきん
1180 | ちけいず
1181 | ちけん
1182 | ちこく
1183 | ちさい
1184 | ちしき
1185 | ちしりょう
1186 | ちせい
1187 | ちそう
1188 | ちたい
1189 | ちたん
1190 | ちちおや
1191 | ちつじょ
1192 | ちてき
1193 | ちてん
1194 | ちぬき
1195 | ちぬり
1196 | ちのう
1197 | ちひょう
1198 | ちへいせん
1199 | ちほう
1200 | ちまた
1201 | ちみつ
1202 | ちみどろ
1203 | ちめいど
1204 | ちゃんこなべ
1205 | ちゅうい
1206 | ちゆりょく
1207 | ちょうし
1208 | ちょさくけん
1209 | ちらし
1210 | ちらみ
1211 | ちりがみ
1212 | ちりょう
1213 | ちるど
1214 | ちわわ
1215 | ちんたい
1216 | ちんもく
1217 | ついか
1218 | ついたち
1219 | つうか
1220 | つうじょう
1221 | つうはん
1222 | つうわ
1223 | つかう
1224 | つかれる
1225 | つくね
1226 | つくる
1227 | つけね
1228 | つける
1229 | つごう
1230 | つたえる
1231 | つづく
1232 | つつじ
1233 | つつむ
1234 | つとめる
1235 | つながる
1236 | つなみ
1237 | つねづね
1238 | つのる
1239 | つぶす
1240 | つまらない
1241 | つまる
1242 | つみき
1243 | つめたい
1244 | つもり
1245 | つもる
1246 | つよい
1247 | つるぼ
1248 | つるみく
1249 | つわもの
1250 | つわり
1251 | てあし
1252 | てあて
1253 | てあみ
1254 | ていおん
1255 | ていか
1256 | ていき
1257 | ていけい
1258 | ていこく
1259 | ていさつ
1260 | ていし
1261 | ていせい
1262 | ていたい
1263 | ていど
1264 | ていねい
1265 | ていひょう
1266 | ていへん
1267 | ていぼう
1268 | てうち
1269 | ておくれ
1270 | てきとう
1271 | てくび
1272 | でこぼこ
1273 | てさぎょう
1274 | てさげ
1275 | てすり
1276 | てそう
1277 | てちがい
1278 | てちょう
1279 | てつがく
1280 | てつづき
1281 | でっぱ
1282 | てつぼう
1283 | てつや
1284 | でぬかえ
1285 | てぬき
1286 | てぬぐい
1287 | てのひら
1288 | てはい
1289 | てぶくろ
1290 | てふだ
1291 | てほどき
1292 | てほん
1293 | てまえ
1294 | てまきずし
1295 | てみじか
1296 | てみやげ
1297 | てらす
1298 | てれび
1299 | てわけ
1300 | てわたし
1301 | でんあつ
1302 | てんいん
1303 | てんかい
1304 | てんき
1305 | てんぐ
1306 | てんけん
1307 | てんごく
1308 | てんさい
1309 | てんし
1310 | てんすう
1311 | でんち
1312 | てんてき
1313 | てんとう
1314 | てんない
1315 | てんぷら
1316 | てんぼうだい
1317 | てんめつ
1318 | てんらんかい
1319 | でんりょく
1320 | でんわ
1321 | どあい
1322 | といれ
1323 | どうかん
1324 | とうきゅう
1325 | どうぐ
1326 | とうし
1327 | とうむぎ
1328 | とおい
1329 | とおか
1330 | とおく
1331 | とおす
1332 | とおる
1333 | とかい
1334 | とかす
1335 | ときおり
1336 | ときどき
1337 | とくい
1338 | とくしゅう
1339 | とくてん
1340 | とくに
1341 | とくべつ
1342 | とけい
1343 | とける
1344 | とこや
1345 | とさか
1346 | としょかん
1347 | とそう
1348 | とたん
1349 | とちゅう
1350 | とっきゅう
1351 | とっくん
1352 | とつぜん
1353 | とつにゅう
1354 | とどける
1355 | ととのえる
1356 | とない
1357 | となえる
1358 | となり
1359 | とのさま
1360 | とばす
1361 | どぶがわ
1362 | とほう
1363 | とまる
1364 | とめる
1365 | ともだち
1366 | ともる
1367 | どようび
1368 | とらえる
1369 | とんかつ
1370 | どんぶり
1371 | ないかく
1372 | ないこう
1373 | ないしょ
1374 | ないす
1375 | ないせん
1376 | ないそう
1377 | なおす
1378 | ながい
1379 | なくす
1380 | なげる
1381 | なこうど
1382 | なさけ
1383 | なたでここ
1384 | なっとう
1385 | なつやすみ
1386 | ななおし
1387 | なにごと
1388 | なにもの
1389 | なにわ
1390 | なのか
1391 | なふだ
1392 | なまいき
1393 | なまえ
1394 | なまみ
1395 | なみだ
1396 | なめらか
1397 | なめる
1398 | なやむ
1399 | ならう
1400 | ならび
1401 | ならぶ
1402 | なれる
1403 | なわとび
1404 | なわばり
1405 | にあう
1406 | にいがた
1407 | にうけ
1408 | におい
1409 | にかい
1410 | にがて
1411 | にきび
1412 | にくしみ
1413 | にくまん
1414 | にげる
1415 | にさんかたんそ
1416 | にしき
1417 | にせもの
1418 | にちじょう
1419 | にちようび
1420 | にっか
1421 | にっき
1422 | にっけい
1423 | にっこう
1424 | にっさん
1425 | にっしょく
1426 | にっすう
1427 | にっせき
1428 | にってい
1429 | になう
1430 | にほん
1431 | にまめ
1432 | にもつ
1433 | にやり
1434 | にゅういん
1435 | にりんしゃ
1436 | にわとり
1437 | にんい
1438 | にんか
1439 | にんき
1440 | にんげん
1441 | にんしき
1442 | にんずう
1443 | にんそう
1444 | にんたい
1445 | にんち
1446 | にんてい
1447 | にんにく
1448 | にんぷ
1449 | にんまり
1450 | にんむ
1451 | にんめい
1452 | にんよう
1453 | ぬいくぎ
1454 | ぬかす
1455 | ぬぐいとる
1456 | ぬぐう
1457 | ぬくもり
1458 | ぬすむ
1459 | ぬまえび
1460 | ぬめり
1461 | ぬらす
1462 | ぬんちゃく
1463 | ねあげ
1464 | ねいき
1465 | ねいる
1466 | ねいろ
1467 | ねぐせ
1468 | ねくたい
1469 | ねくら
1470 | ねこぜ
1471 | ねこむ
1472 | ねさげ
1473 | ねすごす
1474 | ねそべる
1475 | ねだん
1476 | ねつい
1477 | ねっしん
1478 | ねつぞう
1479 | ねったいぎょ
1480 | ねぶそく
1481 | ねふだ
1482 | ねぼう
1483 | ねほりはほり
1484 | ねまき
1485 | ねまわし
1486 | ねみみ
1487 | ねむい
1488 | ねむたい
1489 | ねもと
1490 | ねらう
1491 | ねわざ
1492 | ねんいり
1493 | ねんおし
1494 | ねんかん
1495 | ねんきん
1496 | ねんぐ
1497 | ねんざ
1498 | ねんし
1499 | ねんちゃく
1500 | ねんど
1501 | ねんぴ
1502 | ねんぶつ
1503 | ねんまつ
1504 | ねんりょう
1505 | ねんれい
1506 | のいず
1507 | のおづま
1508 | のがす
1509 | のきなみ
1510 | のこぎり
1511 | のこす
1512 | のこる
1513 | のせる
1514 | のぞく
1515 | のぞむ
1516 | のたまう
1517 | のちほど
1518 | のっく
1519 | のばす
1520 | のはら
1521 | のべる
1522 | のぼる
1523 | のみもの
1524 | のやま
1525 | のらいぬ
1526 | のらねこ
1527 | のりもの
1528 | のりゆき
1529 | のれん
1530 | のんき
1531 | ばあい
1532 | はあく
1533 | ばあさん
1534 | ばいか
1535 | ばいく
1536 | はいけん
1537 | はいご
1538 | はいしん
1539 | はいすい
1540 | はいせん
1541 | はいそう
1542 | はいち
1543 | ばいばい
1544 | はいれつ
1545 | はえる
1546 | はおる
1547 | はかい
1548 | ばかり
1549 | はかる
1550 | はくしゅ
1551 | はけん
1552 | はこぶ
1553 | はさみ
1554 | はさん
1555 | はしご
1556 | ばしょ
1557 | はしる
1558 | はせる
1559 | ぱそこん
1560 | はそん
1561 | はたん
1562 | はちみつ
1563 | はつおん
1564 | はっかく
1565 | はづき
1566 | はっきり
1567 | はっくつ
1568 | はっけん
1569 | はっこう
1570 | はっさん
1571 | はっしん
1572 | はったつ
1573 | はっちゅう
1574 | はってん
1575 | はっぴょう
1576 | はっぽう
1577 | はなす
1578 | はなび
1579 | はにかむ
1580 | はぶらし
1581 | はみがき
1582 | はむかう
1583 | はめつ
1584 | はやい
1585 | はやし
1586 | はらう
1587 | はろうぃん
1588 | はわい
1589 | はんい
1590 | はんえい
1591 | はんおん
1592 | はんかく
1593 | はんきょう
1594 | ばんぐみ
1595 | はんこ
1596 | はんしゃ
1597 | はんすう
1598 | はんだん
1599 | ぱんち
1600 | ぱんつ
1601 | はんてい
1602 | はんとし
1603 | はんのう
1604 | はんぱ
1605 | はんぶん
1606 | はんぺん
1607 | はんぼうき
1608 | はんめい
1609 | はんらん
1610 | はんろん
1611 | ひいき
1612 | ひうん
1613 | ひえる
1614 | ひかく
1615 | ひかり
1616 | ひかる
1617 | ひかん
1618 | ひくい
1619 | ひけつ
1620 | ひこうき
1621 | ひこく
1622 | ひさい
1623 | ひさしぶり
1624 | ひさん
1625 | びじゅつかん
1626 | ひしょ
1627 | ひそか
1628 | ひそむ
1629 | ひたむき
1630 | ひだり
1631 | ひたる
1632 | ひつぎ
1633 | ひっこし
1634 | ひっし
1635 | ひつじゅひん
1636 | ひっす
1637 | ひつぜん
1638 | ぴったり
1639 | ぴっちり
1640 | ひつよう
1641 | ひてい
1642 | ひとごみ
1643 | ひなまつり
1644 | ひなん
1645 | ひねる
1646 | ひはん
1647 | ひびく
1648 | ひひょう
1649 | ひほう
1650 | ひまわり
1651 | ひまん
1652 | ひみつ
1653 | ひめい
1654 | ひめじし
1655 | ひやけ
1656 | ひやす
1657 | ひよう
1658 | びょうき
1659 | ひらがな
1660 | ひらく
1661 | ひりつ
1662 | ひりょう
1663 | ひるま
1664 | ひるやすみ
1665 | ひれい
1666 | ひろい
1667 | ひろう
1668 | ひろき
1669 | ひろゆき
1670 | ひんかく
1671 | ひんけつ
1672 | ひんこん
1673 | ひんしゅ
1674 | ひんそう
1675 | ぴんち
1676 | ひんぱん
1677 | びんぼう
1678 | ふあん
1679 | ふいうち
1680 | ふうけい
1681 | ふうせん
1682 | ぷうたろう
1683 | ふうとう
1684 | ふうふ
1685 | ふえる
1686 | ふおん
1687 | ふかい
1688 | ふきん
1689 | ふくざつ
1690 | ふくぶくろ
1691 | ふこう
1692 | ふさい
1693 | ふしぎ
1694 | ふじみ
1695 | ふすま
1696 | ふせい
1697 | ふせぐ
1698 | ふそく
1699 | ぶたにく
1700 | ふたん
1701 | ふちょう
1702 | ふつう
1703 | ふつか
1704 | ふっかつ
1705 | ふっき
1706 | ふっこく
1707 | ぶどう
1708 | ふとる
1709 | ふとん
1710 | ふのう
1711 | ふはい
1712 | ふひょう
1713 | ふへん
1714 | ふまん
1715 | ふみん
1716 | ふめつ
1717 | ふめん
1718 | ふよう
1719 | ふりこ
1720 | ふりる
1721 | ふるい
1722 | ふんいき
1723 | ぶんがく
1724 | ぶんぐ
1725 | ふんしつ
1726 | ぶんせき
1727 | ふんそう
1728 | ぶんぽう
1729 | へいあん
1730 | へいおん
1731 | へいがい
1732 | へいき
1733 | へいげん
1734 | へいこう
1735 | へいさ
1736 | へいしゃ
1737 | へいせつ
1738 | へいそ
1739 | へいたく
1740 | へいてん
1741 | へいねつ
1742 | へいわ
1743 | へきが
1744 | へこむ
1745 | べにいろ
1746 | べにしょうが
1747 | へらす
1748 | へんかん
1749 | べんきょう
1750 | べんごし
1751 | へんさい
1752 | へんたい
1753 | べんり
1754 | ほあん
1755 | ほいく
1756 | ぼうぎょ
1757 | ほうこく
1758 | ほうそう
1759 | ほうほう
1760 | ほうもん
1761 | ほうりつ
1762 | ほえる
1763 | ほおん
1764 | ほかん
1765 | ほきょう
1766 | ぼきん
1767 | ほくろ
1768 | ほけつ
1769 | ほけん
1770 | ほこう
1771 | ほこる
1772 | ほしい
1773 | ほしつ
1774 | ほしゅ
1775 | ほしょう
1776 | ほせい
1777 | ほそい
1778 | ほそく
1779 | ほたて
1780 | ほたる
1781 | ぽちぶくろ
1782 | ほっきょく
1783 | ほっさ
1784 | ほったん
1785 | ほとんど
1786 | ほめる
1787 | ほんい
1788 | ほんき
1789 | ほんけ
1790 | ほんしつ
1791 | ほんやく
1792 | まいにち
1793 | まかい
1794 | まかせる
1795 | まがる
1796 | まける
1797 | まこと
1798 | まさつ
1799 | まじめ
1800 | ますく
1801 | まぜる
1802 | まつり
1803 | まとめ
1804 | まなぶ
1805 | まぬけ
1806 | まねく
1807 | まほう
1808 | まもる
1809 | まゆげ
1810 | まよう
1811 | まろやか
1812 | まわす
1813 | まわり
1814 | まわる
1815 | まんが
1816 | まんきつ
1817 | まんぞく
1818 | まんなか
1819 | みいら
1820 | みうち
1821 | みえる
1822 | みがく
1823 | みかた
1824 | みかん
1825 | みけん
1826 | みこん
1827 | みじかい
1828 | みすい
1829 | みすえる
1830 | みせる
1831 | みっか
1832 | みつかる
1833 | みつける
1834 | みてい
1835 | みとめる
1836 | みなと
1837 | みなみかさい
1838 | みねらる
1839 | みのう
1840 | みのがす
1841 | みほん
1842 | みもと
1843 | みやげ
1844 | みらい
1845 | みりょく
1846 | みわく
1847 | みんか
1848 | みんぞく
1849 | むいか
1850 | むえき
1851 | むえん
1852 | むかい
1853 | むかう
1854 | むかえ
1855 | むかし
1856 | むぎちゃ
1857 | むける
1858 | むげん
1859 | むさぼる
1860 | むしあつい
1861 | むしば
1862 | むじゅん
1863 | むしろ
1864 | むすう
1865 | むすこ
1866 | むすぶ
1867 | むすめ
1868 | むせる
1869 | むせん
1870 | むちゅう
1871 | むなしい
1872 | むのう
1873 | むやみ
1874 | むよう
1875 | むらさき
1876 | むりょう
1877 | むろん
1878 | めいあん
1879 | めいうん
1880 | めいえん
1881 | めいかく
1882 | めいきょく
1883 | めいさい
1884 | めいし
1885 | めいそう
1886 | めいぶつ
1887 | めいれい
1888 | めいわく
1889 | めぐまれる
1890 | めざす
1891 | めした
1892 | めずらしい
1893 | めだつ
1894 | めまい
1895 | めやす
1896 | めんきょ
1897 | めんせき
1898 | めんどう
1899 | もうしあげる
1900 | もうどうけん
1901 | もえる
1902 | もくし
1903 | もくてき
1904 | もくようび
1905 | もちろん
1906 | もどる
1907 | もらう
1908 | もんく
1909 | もんだい
1910 | やおや
1911 | やける
1912 | やさい
1913 | やさしい
1914 | やすい
1915 | やすたろう
1916 | やすみ
1917 | やせる
1918 | やそう
1919 | やたい
1920 | やちん
1921 | やっと
1922 | やっぱり
1923 | やぶる
1924 | やめる
1925 | ややこしい
1926 | やよい
1927 | やわらかい
1928 | ゆうき
1929 | ゆうびんきょく
1930 | ゆうべ
1931 | ゆうめい
1932 | ゆけつ
1933 | ゆしゅつ
1934 | ゆせん
1935 | ゆそう
1936 | ゆたか
1937 | ゆちゃく
1938 | ゆでる
1939 | ゆにゅう
1940 | ゆびわ
1941 | ゆらい
1942 | ゆれる
1943 | ようい
1944 | ようか
1945 | ようきゅう
1946 | ようじ
1947 | ようす
1948 | ようちえん
1949 | よかぜ
1950 | よかん
1951 | よきん
1952 | よくせい
1953 | よくぼう
1954 | よけい
1955 | よごれる
1956 | よさん
1957 | よしゅう
1958 | よそう
1959 | よそく
1960 | よっか
1961 | よてい
1962 | よどがわく
1963 | よねつ
1964 | よやく
1965 | よゆう
1966 | よろこぶ
1967 | よろしい
1968 | らいう
1969 | らくがき
1970 | らくご
1971 | らくさつ
1972 | らくだ
1973 | らしんばん
1974 | らせん
1975 | らぞく
1976 | らたい
1977 | らっか
1978 | られつ
1979 | りえき
1980 | りかい
1981 | りきさく
1982 | りきせつ
1983 | りくぐん
1984 | りくつ
1985 | りけん
1986 | りこう
1987 | りせい
1988 | りそう
1989 | りそく
1990 | りてん
1991 | りねん
1992 | りゆう
1993 | りゅうがく
1994 | りよう
1995 | りょうり
1996 | りょかん
1997 | りょくちゃ
1998 | りょこう
1999 | りりく
2000 | りれき
2001 | りろん
2002 | りんご
2003 | るいけい
2004 | るいさい
2005 | るいじ
2006 | るいせき
2007 | るすばん
2008 | るりがわら
2009 | れいかん
2010 | れいぎ
2011 | れいせい
2012 | れいぞうこ
2013 | れいとう
2014 | れいぼう
2015 | れきし
2016 | れきだい
2017 | れんあい
2018 | れんけい
2019 | れんこん
2020 | れんさい
2021 | れんしゅう
2022 | れんぞく
2023 | れんらく
2024 | ろうか
2025 | ろうご
2026 | ろうじん
2027 | ろうそく
2028 | ろくが
2029 | ろこつ
2030 | ろじうら
2031 | ろしゅつ
2032 | ろせん
2033 | ろてん
2034 | ろめん
2035 | ろれつ
2036 | ろんぎ
2037 | ろんぱ
2038 | ろんぶん
2039 | ろんり
2040 | わかす
2041 | わかめ
2042 | わかやま
2043 | わかれる
2044 | わしつ
2045 | わじまし
2046 | わすれもの
2047 | わらう
2048 | われる
--------------------------------------------------------------------------------
/src/main/resources/wordlists/korean.txt:
--------------------------------------------------------------------------------
1 | 가격
2 | 가끔
3 | 가난
4 | 가능
5 | 가득
6 | 가르침
7 | 가뭄
8 | 가방
9 | 가상
10 | 가슴
11 | 가운데
12 | 가을
13 | 가이드
14 | 가입
15 | 가장
16 | 가정
17 | 가족
18 | 가죽
19 | 각오
20 | 각자
21 | 간격
22 | 간부
23 | 간섭
24 | 간장
25 | 간접
26 | 간판
27 | 갈등
28 | 갈비
29 | 갈색
30 | 갈증
31 | 감각
32 | 감기
33 | 감소
34 | 감수성
35 | 감자
36 | 감정
37 | 갑자기
38 | 강남
39 | 강당
40 | 강도
41 | 강력히
42 | 강변
43 | 강북
44 | 강사
45 | 강수량
46 | 강아지
47 | 강원도
48 | 강의
49 | 강제
50 | 강조
51 | 같이
52 | 개구리
53 | 개나리
54 | 개방
55 | 개별
56 | 개선
57 | 개성
58 | 개인
59 | 객관적
60 | 거실
61 | 거액
62 | 거울
63 | 거짓
64 | 거품
65 | 걱정
66 | 건강
67 | 건물
68 | 건설
69 | 건조
70 | 건축
71 | 걸음
72 | 검사
73 | 검토
74 | 게시판
75 | 게임
76 | 겨울
77 | 견해
78 | 결과
79 | 결국
80 | 결론
81 | 결석
82 | 결승
83 | 결심
84 | 결정
85 | 결혼
86 | 경계
87 | 경고
88 | 경기
89 | 경력
90 | 경복궁
91 | 경비
92 | 경상도
93 | 경영
94 | 경우
95 | 경쟁
96 | 경제
97 | 경주
98 | 경찰
99 | 경치
100 | 경향
101 | 경험
102 | 계곡
103 | 계단
104 | 계란
105 | 계산
106 | 계속
107 | 계약
108 | 계절
109 | 계층
110 | 계획
111 | 고객
112 | 고구려
113 | 고궁
114 | 고급
115 | 고등학생
116 | 고무신
117 | 고민
118 | 고양이
119 | 고장
120 | 고전
121 | 고집
122 | 고춧가루
123 | 고통
124 | 고향
125 | 곡식
126 | 골목
127 | 골짜기
128 | 골프
129 | 공간
130 | 공개
131 | 공격
132 | 공군
133 | 공급
134 | 공기
135 | 공동
136 | 공무원
137 | 공부
138 | 공사
139 | 공식
140 | 공업
141 | 공연
142 | 공원
143 | 공장
144 | 공짜
145 | 공책
146 | 공통
147 | 공포
148 | 공항
149 | 공휴일
150 | 과목
151 | 과일
152 | 과장
153 | 과정
154 | 과학
155 | 관객
156 | 관계
157 | 관광
158 | 관념
159 | 관람
160 | 관련
161 | 관리
162 | 관습
163 | 관심
164 | 관점
165 | 관찰
166 | 광경
167 | 광고
168 | 광장
169 | 광주
170 | 괴로움
171 | 굉장히
172 | 교과서
173 | 교문
174 | 교복
175 | 교실
176 | 교양
177 | 교육
178 | 교장
179 | 교직
180 | 교통
181 | 교환
182 | 교훈
183 | 구경
184 | 구름
185 | 구멍
186 | 구별
187 | 구분
188 | 구석
189 | 구성
190 | 구속
191 | 구역
192 | 구입
193 | 구청
194 | 구체적
195 | 국가
196 | 국기
197 | 국내
198 | 국립
199 | 국물
200 | 국민
201 | 국수
202 | 국어
203 | 국왕
204 | 국적
205 | 국제
206 | 국회
207 | 군대
208 | 군사
209 | 군인
210 | 궁극적
211 | 권리
212 | 권위
213 | 권투
214 | 귀국
215 | 귀신
216 | 규정
217 | 규칙
218 | 균형
219 | 그날
220 | 그냥
221 | 그늘
222 | 그러나
223 | 그룹
224 | 그릇
225 | 그림
226 | 그제서야
227 | 그토록
228 | 극복
229 | 극히
230 | 근거
231 | 근교
232 | 근래
233 | 근로
234 | 근무
235 | 근본
236 | 근원
237 | 근육
238 | 근처
239 | 글씨
240 | 글자
241 | 금강산
242 | 금고
243 | 금년
244 | 금메달
245 | 금액
246 | 금연
247 | 금요일
248 | 금지
249 | 긍정적
250 | 기간
251 | 기관
252 | 기념
253 | 기능
254 | 기독교
255 | 기둥
256 | 기록
257 | 기름
258 | 기법
259 | 기본
260 | 기분
261 | 기쁨
262 | 기숙사
263 | 기술
264 | 기억
265 | 기업
266 | 기온
267 | 기운
268 | 기원
269 | 기적
270 | 기준
271 | 기침
272 | 기혼
273 | 기획
274 | 긴급
275 | 긴장
276 | 길이
277 | 김밥
278 | 김치
279 | 김포공항
280 | 깍두기
281 | 깜빡
282 | 깨달음
283 | 깨소금
284 | 껍질
285 | 꼭대기
286 | 꽃잎
287 | 나들이
288 | 나란히
289 | 나머지
290 | 나물
291 | 나침반
292 | 나흘
293 | 낙엽
294 | 난방
295 | 날개
296 | 날씨
297 | 날짜
298 | 남녀
299 | 남대문
300 | 남매
301 | 남산
302 | 남자
303 | 남편
304 | 남학생
305 | 낭비
306 | 낱말
307 | 내년
308 | 내용
309 | 내일
310 | 냄비
311 | 냄새
312 | 냇물
313 | 냉동
314 | 냉면
315 | 냉방
316 | 냉장고
317 | 넥타이
318 | 넷째
319 | 노동
320 | 노란색
321 | 노력
322 | 노인
323 | 녹음
324 | 녹차
325 | 녹화
326 | 논리
327 | 논문
328 | 논쟁
329 | 놀이
330 | 농구
331 | 농담
332 | 농민
333 | 농부
334 | 농업
335 | 농장
336 | 농촌
337 | 높이
338 | 눈동자
339 | 눈물
340 | 눈썹
341 | 뉴욕
342 | 느낌
343 | 늑대
344 | 능동적
345 | 능력
346 | 다방
347 | 다양성
348 | 다음
349 | 다이어트
350 | 다행
351 | 단계
352 | 단골
353 | 단독
354 | 단맛
355 | 단순
356 | 단어
357 | 단위
358 | 단점
359 | 단체
360 | 단추
361 | 단편
362 | 단풍
363 | 달걀
364 | 달러
365 | 달력
366 | 달리
367 | 닭고기
368 | 담당
369 | 담배
370 | 담요
371 | 담임
372 | 답변
373 | 답장
374 | 당근
375 | 당분간
376 | 당연히
377 | 당장
378 | 대규모
379 | 대낮
380 | 대단히
381 | 대답
382 | 대도시
383 | 대략
384 | 대량
385 | 대륙
386 | 대문
387 | 대부분
388 | 대신
389 | 대응
390 | 대장
391 | 대전
392 | 대접
393 | 대중
394 | 대책
395 | 대출
396 | 대충
397 | 대통령
398 | 대학
399 | 대한민국
400 | 대합실
401 | 대형
402 | 덩어리
403 | 데이트
404 | 도대체
405 | 도덕
406 | 도둑
407 | 도망
408 | 도서관
409 | 도심
410 | 도움
411 | 도입
412 | 도자기
413 | 도저히
414 | 도전
415 | 도중
416 | 도착
417 | 독감
418 | 독립
419 | 독서
420 | 독일
421 | 독창적
422 | 동화책
423 | 뒷모습
424 | 뒷산
425 | 딸아이
426 | 마누라
427 | 마늘
428 | 마당
429 | 마라톤
430 | 마련
431 | 마무리
432 | 마사지
433 | 마약
434 | 마요네즈
435 | 마을
436 | 마음
437 | 마이크
438 | 마중
439 | 마지막
440 | 마찬가지
441 | 마찰
442 | 마흔
443 | 막걸리
444 | 막내
445 | 막상
446 | 만남
447 | 만두
448 | 만세
449 | 만약
450 | 만일
451 | 만점
452 | 만족
453 | 만화
454 | 많이
455 | 말기
456 | 말씀
457 | 말투
458 | 맘대로
459 | 망원경
460 | 매년
461 | 매달
462 | 매력
463 | 매번
464 | 매스컴
465 | 매일
466 | 매장
467 | 맥주
468 | 먹이
469 | 먼저
470 | 먼지
471 | 멀리
472 | 메일
473 | 며느리
474 | 며칠
475 | 면담
476 | 멸치
477 | 명단
478 | 명령
479 | 명예
480 | 명의
481 | 명절
482 | 명칭
483 | 명함
484 | 모금
485 | 모니터
486 | 모델
487 | 모든
488 | 모범
489 | 모습
490 | 모양
491 | 모임
492 | 모조리
493 | 모집
494 | 모퉁이
495 | 목걸이
496 | 목록
497 | 목사
498 | 목소리
499 | 목숨
500 | 목적
501 | 목표
502 | 몰래
503 | 몸매
504 | 몸무게
505 | 몸살
506 | 몸속
507 | 몸짓
508 | 몸통
509 | 몹시
510 | 무관심
511 | 무궁화
512 | 무더위
513 | 무덤
514 | 무릎
515 | 무슨
516 | 무엇
517 | 무역
518 | 무용
519 | 무조건
520 | 무지개
521 | 무척
522 | 문구
523 | 문득
524 | 문법
525 | 문서
526 | 문제
527 | 문학
528 | 문화
529 | 물가
530 | 물건
531 | 물결
532 | 물고기
533 | 물론
534 | 물리학
535 | 물음
536 | 물질
537 | 물체
538 | 미국
539 | 미디어
540 | 미사일
541 | 미술
542 | 미역
543 | 미용실
544 | 미움
545 | 미인
546 | 미팅
547 | 미혼
548 | 민간
549 | 민족
550 | 민주
551 | 믿음
552 | 밀가루
553 | 밀리미터
554 | 밑바닥
555 | 바가지
556 | 바구니
557 | 바나나
558 | 바늘
559 | 바닥
560 | 바닷가
561 | 바람
562 | 바이러스
563 | 바탕
564 | 박물관
565 | 박사
566 | 박수
567 | 반대
568 | 반드시
569 | 반말
570 | 반발
571 | 반성
572 | 반응
573 | 반장
574 | 반죽
575 | 반지
576 | 반찬
577 | 받침
578 | 발가락
579 | 발걸음
580 | 발견
581 | 발달
582 | 발레
583 | 발목
584 | 발바닥
585 | 발생
586 | 발음
587 | 발자국
588 | 발전
589 | 발톱
590 | 발표
591 | 밤하늘
592 | 밥그릇
593 | 밥맛
594 | 밥상
595 | 밥솥
596 | 방금
597 | 방면
598 | 방문
599 | 방바닥
600 | 방법
601 | 방송
602 | 방식
603 | 방안
604 | 방울
605 | 방지
606 | 방학
607 | 방해
608 | 방향
609 | 배경
610 | 배꼽
611 | 배달
612 | 배드민턴
613 | 백두산
614 | 백색
615 | 백성
616 | 백인
617 | 백제
618 | 백화점
619 | 버릇
620 | 버섯
621 | 버튼
622 | 번개
623 | 번역
624 | 번지
625 | 번호
626 | 벌금
627 | 벌레
628 | 벌써
629 | 범위
630 | 범인
631 | 범죄
632 | 법률
633 | 법원
634 | 법적
635 | 법칙
636 | 베이징
637 | 벨트
638 | 변경
639 | 변동
640 | 변명
641 | 변신
642 | 변호사
643 | 변화
644 | 별도
645 | 별명
646 | 별일
647 | 병실
648 | 병아리
649 | 병원
650 | 보관
651 | 보너스
652 | 보라색
653 | 보람
654 | 보름
655 | 보상
656 | 보안
657 | 보자기
658 | 보장
659 | 보전
660 | 보존
661 | 보통
662 | 보편적
663 | 보험
664 | 복도
665 | 복사
666 | 복숭아
667 | 복습
668 | 볶음
669 | 본격적
670 | 본래
671 | 본부
672 | 본사
673 | 본성
674 | 본인
675 | 본질
676 | 볼펜
677 | 봉사
678 | 봉지
679 | 봉투
680 | 부근
681 | 부끄러움
682 | 부담
683 | 부동산
684 | 부문
685 | 부분
686 | 부산
687 | 부상
688 | 부엌
689 | 부인
690 | 부작용
691 | 부장
692 | 부정
693 | 부족
694 | 부지런히
695 | 부친
696 | 부탁
697 | 부품
698 | 부회장
699 | 북부
700 | 북한
701 | 분노
702 | 분량
703 | 분리
704 | 분명
705 | 분석
706 | 분야
707 | 분위기
708 | 분필
709 | 분홍색
710 | 불고기
711 | 불과
712 | 불교
713 | 불꽃
714 | 불만
715 | 불법
716 | 불빛
717 | 불안
718 | 불이익
719 | 불행
720 | 브랜드
721 | 비극
722 | 비난
723 | 비닐
724 | 비둘기
725 | 비디오
726 | 비로소
727 | 비만
728 | 비명
729 | 비밀
730 | 비바람
731 | 비빔밥
732 | 비상
733 | 비용
734 | 비율
735 | 비중
736 | 비타민
737 | 비판
738 | 빌딩
739 | 빗물
740 | 빗방울
741 | 빗줄기
742 | 빛깔
743 | 빨간색
744 | 빨래
745 | 빨리
746 | 사건
747 | 사계절
748 | 사나이
749 | 사냥
750 | 사람
751 | 사랑
752 | 사립
753 | 사모님
754 | 사물
755 | 사방
756 | 사상
757 | 사생활
758 | 사설
759 | 사슴
760 | 사실
761 | 사업
762 | 사용
763 | 사월
764 | 사장
765 | 사전
766 | 사진
767 | 사촌
768 | 사춘기
769 | 사탕
770 | 사투리
771 | 사흘
772 | 산길
773 | 산부인과
774 | 산업
775 | 산책
776 | 살림
777 | 살인
778 | 살짝
779 | 삼계탕
780 | 삼국
781 | 삼십
782 | 삼월
783 | 삼촌
784 | 상관
785 | 상금
786 | 상대
787 | 상류
788 | 상반기
789 | 상상
790 | 상식
791 | 상업
792 | 상인
793 | 상자
794 | 상점
795 | 상처
796 | 상추
797 | 상태
798 | 상표
799 | 상품
800 | 상황
801 | 새벽
802 | 색깔
803 | 색연필
804 | 생각
805 | 생명
806 | 생물
807 | 생방송
808 | 생산
809 | 생선
810 | 생신
811 | 생일
812 | 생활
813 | 서랍
814 | 서른
815 | 서명
816 | 서민
817 | 서비스
818 | 서양
819 | 서울
820 | 서적
821 | 서점
822 | 서쪽
823 | 서클
824 | 석사
825 | 석유
826 | 선거
827 | 선물
828 | 선배
829 | 선생
830 | 선수
831 | 선원
832 | 선장
833 | 선전
834 | 선택
835 | 선풍기
836 | 설거지
837 | 설날
838 | 설렁탕
839 | 설명
840 | 설문
841 | 설사
842 | 설악산
843 | 설치
844 | 설탕
845 | 섭씨
846 | 성공
847 | 성당
848 | 성명
849 | 성별
850 | 성인
851 | 성장
852 | 성적
853 | 성질
854 | 성함
855 | 세금
856 | 세미나
857 | 세상
858 | 세월
859 | 세종대왕
860 | 세탁
861 | 센터
862 | 센티미터
863 | 셋째
864 | 소규모
865 | 소극적
866 | 소금
867 | 소나기
868 | 소년
869 | 소득
870 | 소망
871 | 소문
872 | 소설
873 | 소속
874 | 소아과
875 | 소용
876 | 소원
877 | 소음
878 | 소중히
879 | 소지품
880 | 소질
881 | 소풍
882 | 소형
883 | 속담
884 | 속도
885 | 속옷
886 | 손가락
887 | 손길
888 | 손녀
889 | 손님
890 | 손등
891 | 손목
892 | 손뼉
893 | 손실
894 | 손질
895 | 손톱
896 | 손해
897 | 솔직히
898 | 솜씨
899 | 송아지
900 | 송이
901 | 송편
902 | 쇠고기
903 | 쇼핑
904 | 수건
905 | 수년
906 | 수단
907 | 수돗물
908 | 수동적
909 | 수면
910 | 수명
911 | 수박
912 | 수상
913 | 수석
914 | 수술
915 | 수시로
916 | 수업
917 | 수염
918 | 수영
919 | 수입
920 | 수준
921 | 수집
922 | 수출
923 | 수컷
924 | 수필
925 | 수학
926 | 수험생
927 | 수화기
928 | 숙녀
929 | 숙소
930 | 숙제
931 | 순간
932 | 순서
933 | 순수
934 | 순식간
935 | 순위
936 | 숟가락
937 | 술병
938 | 술집
939 | 숫자
940 | 스님
941 | 스물
942 | 스스로
943 | 스승
944 | 스웨터
945 | 스위치
946 | 스케이트
947 | 스튜디오
948 | 스트레스
949 | 스포츠
950 | 슬쩍
951 | 슬픔
952 | 습관
953 | 습기
954 | 승객
955 | 승리
956 | 승부
957 | 승용차
958 | 승진
959 | 시각
960 | 시간
961 | 시골
962 | 시금치
963 | 시나리오
964 | 시댁
965 | 시리즈
966 | 시멘트
967 | 시민
968 | 시부모
969 | 시선
970 | 시설
971 | 시스템
972 | 시아버지
973 | 시어머니
974 | 시월
975 | 시인
976 | 시일
977 | 시작
978 | 시장
979 | 시절
980 | 시점
981 | 시중
982 | 시즌
983 | 시집
984 | 시청
985 | 시합
986 | 시험
987 | 식구
988 | 식기
989 | 식당
990 | 식량
991 | 식료품
992 | 식물
993 | 식빵
994 | 식사
995 | 식생활
996 | 식초
997 | 식탁
998 | 식품
999 | 신고
1000 | 신규
1001 | 신념
1002 | 신문
1003 | 신발
1004 | 신비
1005 | 신사
1006 | 신세
1007 | 신용
1008 | 신제품
1009 | 신청
1010 | 신체
1011 | 신화
1012 | 실감
1013 | 실내
1014 | 실력
1015 | 실례
1016 | 실망
1017 | 실수
1018 | 실습
1019 | 실시
1020 | 실장
1021 | 실정
1022 | 실질적
1023 | 실천
1024 | 실체
1025 | 실컷
1026 | 실태
1027 | 실패
1028 | 실험
1029 | 실현
1030 | 심리
1031 | 심부름
1032 | 심사
1033 | 심장
1034 | 심정
1035 | 심판
1036 | 쌍둥이
1037 | 씨름
1038 | 씨앗
1039 | 아가씨
1040 | 아나운서
1041 | 아드님
1042 | 아들
1043 | 아쉬움
1044 | 아스팔트
1045 | 아시아
1046 | 아울러
1047 | 아저씨
1048 | 아줌마
1049 | 아직
1050 | 아침
1051 | 아파트
1052 | 아프리카
1053 | 아픔
1054 | 아홉
1055 | 아흔
1056 | 악기
1057 | 악몽
1058 | 악수
1059 | 안개
1060 | 안경
1061 | 안과
1062 | 안내
1063 | 안녕
1064 | 안동
1065 | 안방
1066 | 안부
1067 | 안주
1068 | 알루미늄
1069 | 알코올
1070 | 암시
1071 | 암컷
1072 | 압력
1073 | 앞날
1074 | 앞문
1075 | 애인
1076 | 애정
1077 | 액수
1078 | 앨범
1079 | 야간
1080 | 야단
1081 | 야옹
1082 | 약간
1083 | 약국
1084 | 약속
1085 | 약수
1086 | 약점
1087 | 약품
1088 | 약혼녀
1089 | 양념
1090 | 양력
1091 | 양말
1092 | 양배추
1093 | 양주
1094 | 양파
1095 | 어둠
1096 | 어려움
1097 | 어른
1098 | 어젯밤
1099 | 어쨌든
1100 | 어쩌다가
1101 | 어쩐지
1102 | 언니
1103 | 언덕
1104 | 언론
1105 | 언어
1106 | 얼굴
1107 | 얼른
1108 | 얼음
1109 | 얼핏
1110 | 엄마
1111 | 업무
1112 | 업종
1113 | 업체
1114 | 엉덩이
1115 | 엉망
1116 | 엉터리
1117 | 엊그제
1118 | 에너지
1119 | 에어컨
1120 | 엔진
1121 | 여건
1122 | 여고생
1123 | 여관
1124 | 여군
1125 | 여권
1126 | 여대생
1127 | 여덟
1128 | 여동생
1129 | 여든
1130 | 여론
1131 | 여름
1132 | 여섯
1133 | 여성
1134 | 여왕
1135 | 여인
1136 | 여전히
1137 | 여직원
1138 | 여학생
1139 | 여행
1140 | 역사
1141 | 역시
1142 | 역할
1143 | 연결
1144 | 연구
1145 | 연극
1146 | 연기
1147 | 연락
1148 | 연설
1149 | 연세
1150 | 연속
1151 | 연습
1152 | 연애
1153 | 연예인
1154 | 연인
1155 | 연장
1156 | 연주
1157 | 연출
1158 | 연필
1159 | 연합
1160 | 연휴
1161 | 열기
1162 | 열매
1163 | 열쇠
1164 | 열심히
1165 | 열정
1166 | 열차
1167 | 열흘
1168 | 염려
1169 | 엽서
1170 | 영국
1171 | 영남
1172 | 영상
1173 | 영양
1174 | 영역
1175 | 영웅
1176 | 영원히
1177 | 영하
1178 | 영향
1179 | 영혼
1180 | 영화
1181 | 옆구리
1182 | 옆방
1183 | 옆집
1184 | 예감
1185 | 예금
1186 | 예방
1187 | 예산
1188 | 예상
1189 | 예선
1190 | 예술
1191 | 예습
1192 | 예식장
1193 | 예약
1194 | 예전
1195 | 예절
1196 | 예정
1197 | 예컨대
1198 | 옛날
1199 | 오늘
1200 | 오락
1201 | 오랫동안
1202 | 오렌지
1203 | 오로지
1204 | 오른발
1205 | 오븐
1206 | 오십
1207 | 오염
1208 | 오월
1209 | 오전
1210 | 오직
1211 | 오징어
1212 | 오페라
1213 | 오피스텔
1214 | 오히려
1215 | 옥상
1216 | 옥수수
1217 | 온갖
1218 | 온라인
1219 | 온몸
1220 | 온종일
1221 | 온통
1222 | 올가을
1223 | 올림픽
1224 | 올해
1225 | 옷차림
1226 | 와이셔츠
1227 | 와인
1228 | 완성
1229 | 완전
1230 | 왕비
1231 | 왕자
1232 | 왜냐하면
1233 | 왠지
1234 | 외갓집
1235 | 외국
1236 | 외로움
1237 | 외삼촌
1238 | 외출
1239 | 외침
1240 | 외할머니
1241 | 왼발
1242 | 왼손
1243 | 왼쪽
1244 | 요금
1245 | 요일
1246 | 요즘
1247 | 요청
1248 | 용기
1249 | 용서
1250 | 용어
1251 | 우산
1252 | 우선
1253 | 우승
1254 | 우연히
1255 | 우정
1256 | 우체국
1257 | 우편
1258 | 운동
1259 | 운명
1260 | 운반
1261 | 운전
1262 | 운행
1263 | 울산
1264 | 울음
1265 | 움직임
1266 | 웃어른
1267 | 웃음
1268 | 워낙
1269 | 원고
1270 | 원래
1271 | 원서
1272 | 원숭이
1273 | 원인
1274 | 원장
1275 | 원피스
1276 | 월급
1277 | 월드컵
1278 | 월세
1279 | 월요일
1280 | 웨이터
1281 | 위반
1282 | 위법
1283 | 위성
1284 | 위원
1285 | 위험
1286 | 위협
1287 | 윗사람
1288 | 유난히
1289 | 유럽
1290 | 유명
1291 | 유물
1292 | 유산
1293 | 유적
1294 | 유치원
1295 | 유학
1296 | 유행
1297 | 유형
1298 | 육군
1299 | 육상
1300 | 육십
1301 | 육체
1302 | 은행
1303 | 음력
1304 | 음료
1305 | 음반
1306 | 음성
1307 | 음식
1308 | 음악
1309 | 음주
1310 | 의견
1311 | 의논
1312 | 의문
1313 | 의복
1314 | 의식
1315 | 의심
1316 | 의외로
1317 | 의욕
1318 | 의원
1319 | 의학
1320 | 이것
1321 | 이곳
1322 | 이념
1323 | 이놈
1324 | 이달
1325 | 이대로
1326 | 이동
1327 | 이렇게
1328 | 이력서
1329 | 이론적
1330 | 이름
1331 | 이민
1332 | 이발소
1333 | 이별
1334 | 이불
1335 | 이빨
1336 | 이상
1337 | 이성
1338 | 이슬
1339 | 이야기
1340 | 이용
1341 | 이웃
1342 | 이월
1343 | 이윽고
1344 | 이익
1345 | 이전
1346 | 이중
1347 | 이튿날
1348 | 이틀
1349 | 이혼
1350 | 인간
1351 | 인격
1352 | 인공
1353 | 인구
1354 | 인근
1355 | 인기
1356 | 인도
1357 | 인류
1358 | 인물
1359 | 인생
1360 | 인쇄
1361 | 인연
1362 | 인원
1363 | 인재
1364 | 인종
1365 | 인천
1366 | 인체
1367 | 인터넷
1368 | 인하
1369 | 인형
1370 | 일곱
1371 | 일기
1372 | 일단
1373 | 일대
1374 | 일등
1375 | 일반
1376 | 일본
1377 | 일부
1378 | 일상
1379 | 일생
1380 | 일손
1381 | 일요일
1382 | 일월
1383 | 일정
1384 | 일종
1385 | 일주일
1386 | 일찍
1387 | 일체
1388 | 일치
1389 | 일행
1390 | 일회용
1391 | 임금
1392 | 임무
1393 | 입대
1394 | 입력
1395 | 입맛
1396 | 입사
1397 | 입술
1398 | 입시
1399 | 입원
1400 | 입장
1401 | 입학
1402 | 자가용
1403 | 자격
1404 | 자극
1405 | 자동
1406 | 자랑
1407 | 자부심
1408 | 자식
1409 | 자신
1410 | 자연
1411 | 자원
1412 | 자율
1413 | 자전거
1414 | 자정
1415 | 자존심
1416 | 자판
1417 | 작가
1418 | 작년
1419 | 작성
1420 | 작업
1421 | 작용
1422 | 작은딸
1423 | 작품
1424 | 잔디
1425 | 잔뜩
1426 | 잔치
1427 | 잘못
1428 | 잠깐
1429 | 잠수함
1430 | 잠시
1431 | 잠옷
1432 | 잠자리
1433 | 잡지
1434 | 장관
1435 | 장군
1436 | 장기간
1437 | 장래
1438 | 장례
1439 | 장르
1440 | 장마
1441 | 장면
1442 | 장모
1443 | 장미
1444 | 장비
1445 | 장사
1446 | 장소
1447 | 장식
1448 | 장애인
1449 | 장인
1450 | 장점
1451 | 장차
1452 | 장학금
1453 | 재능
1454 | 재빨리
1455 | 재산
1456 | 재생
1457 | 재작년
1458 | 재정
1459 | 재채기
1460 | 재판
1461 | 재학
1462 | 재활용
1463 | 저것
1464 | 저고리
1465 | 저곳
1466 | 저녁
1467 | 저런
1468 | 저렇게
1469 | 저번
1470 | 저울
1471 | 저절로
1472 | 저축
1473 | 적극
1474 | 적당히
1475 | 적성
1476 | 적용
1477 | 적응
1478 | 전개
1479 | 전공
1480 | 전기
1481 | 전달
1482 | 전라도
1483 | 전망
1484 | 전문
1485 | 전반
1486 | 전부
1487 | 전세
1488 | 전시
1489 | 전용
1490 | 전자
1491 | 전쟁
1492 | 전주
1493 | 전철
1494 | 전체
1495 | 전통
1496 | 전혀
1497 | 전후
1498 | 절대
1499 | 절망
1500 | 절반
1501 | 절약
1502 | 절차
1503 | 점검
1504 | 점수
1505 | 점심
1506 | 점원
1507 | 점점
1508 | 점차
1509 | 접근
1510 | 접시
1511 | 접촉
1512 | 젓가락
1513 | 정거장
1514 | 정도
1515 | 정류장
1516 | 정리
1517 | 정말
1518 | 정면
1519 | 정문
1520 | 정반대
1521 | 정보
1522 | 정부
1523 | 정비
1524 | 정상
1525 | 정성
1526 | 정오
1527 | 정원
1528 | 정장
1529 | 정지
1530 | 정치
1531 | 정확히
1532 | 제공
1533 | 제과점
1534 | 제대로
1535 | 제목
1536 | 제발
1537 | 제법
1538 | 제삿날
1539 | 제안
1540 | 제일
1541 | 제작
1542 | 제주도
1543 | 제출
1544 | 제품
1545 | 제한
1546 | 조각
1547 | 조건
1548 | 조금
1549 | 조깅
1550 | 조명
1551 | 조미료
1552 | 조상
1553 | 조선
1554 | 조용히
1555 | 조절
1556 | 조정
1557 | 조직
1558 | 존댓말
1559 | 존재
1560 | 졸업
1561 | 졸음
1562 | 종교
1563 | 종로
1564 | 종류
1565 | 종소리
1566 | 종업원
1567 | 종종
1568 | 종합
1569 | 좌석
1570 | 죄인
1571 | 주관적
1572 | 주름
1573 | 주말
1574 | 주머니
1575 | 주먹
1576 | 주문
1577 | 주민
1578 | 주방
1579 | 주변
1580 | 주식
1581 | 주인
1582 | 주일
1583 | 주장
1584 | 주전자
1585 | 주택
1586 | 준비
1587 | 줄거리
1588 | 줄기
1589 | 줄무늬
1590 | 중간
1591 | 중계방송
1592 | 중국
1593 | 중년
1594 | 중단
1595 | 중독
1596 | 중반
1597 | 중부
1598 | 중세
1599 | 중소기업
1600 | 중순
1601 | 중앙
1602 | 중요
1603 | 중학교
1604 | 즉석
1605 | 즉시
1606 | 즐거움
1607 | 증가
1608 | 증거
1609 | 증권
1610 | 증상
1611 | 증세
1612 | 지각
1613 | 지갑
1614 | 지경
1615 | 지극히
1616 | 지금
1617 | 지급
1618 | 지능
1619 | 지름길
1620 | 지리산
1621 | 지방
1622 | 지붕
1623 | 지식
1624 | 지역
1625 | 지우개
1626 | 지원
1627 | 지적
1628 | 지점
1629 | 지진
1630 | 지출
1631 | 직선
1632 | 직업
1633 | 직원
1634 | 직장
1635 | 진급
1636 | 진동
1637 | 진로
1638 | 진료
1639 | 진리
1640 | 진짜
1641 | 진찰
1642 | 진출
1643 | 진통
1644 | 진행
1645 | 질문
1646 | 질병
1647 | 질서
1648 | 짐작
1649 | 집단
1650 | 집안
1651 | 집중
1652 | 짜증
1653 | 찌꺼기
1654 | 차남
1655 | 차라리
1656 | 차량
1657 | 차림
1658 | 차별
1659 | 차선
1660 | 차츰
1661 | 착각
1662 | 찬물
1663 | 찬성
1664 | 참가
1665 | 참기름
1666 | 참새
1667 | 참석
1668 | 참여
1669 | 참외
1670 | 참조
1671 | 찻잔
1672 | 창가
1673 | 창고
1674 | 창구
1675 | 창문
1676 | 창밖
1677 | 창작
1678 | 창조
1679 | 채널
1680 | 채점
1681 | 책가방
1682 | 책방
1683 | 책상
1684 | 책임
1685 | 챔피언
1686 | 처벌
1687 | 처음
1688 | 천국
1689 | 천둥
1690 | 천장
1691 | 천재
1692 | 천천히
1693 | 철도
1694 | 철저히
1695 | 철학
1696 | 첫날
1697 | 첫째
1698 | 청년
1699 | 청바지
1700 | 청소
1701 | 청춘
1702 | 체계
1703 | 체력
1704 | 체온
1705 | 체육
1706 | 체중
1707 | 체험
1708 | 초등학생
1709 | 초반
1710 | 초밥
1711 | 초상화
1712 | 초순
1713 | 초여름
1714 | 초원
1715 | 초저녁
1716 | 초점
1717 | 초청
1718 | 초콜릿
1719 | 촛불
1720 | 총각
1721 | 총리
1722 | 총장
1723 | 촬영
1724 | 최근
1725 | 최상
1726 | 최선
1727 | 최신
1728 | 최악
1729 | 최종
1730 | 추석
1731 | 추억
1732 | 추진
1733 | 추천
1734 | 추측
1735 | 축구
1736 | 축소
1737 | 축제
1738 | 축하
1739 | 출근
1740 | 출발
1741 | 출산
1742 | 출신
1743 | 출연
1744 | 출입
1745 | 출장
1746 | 출판
1747 | 충격
1748 | 충고
1749 | 충돌
1750 | 충분히
1751 | 충청도
1752 | 취업
1753 | 취직
1754 | 취향
1755 | 치약
1756 | 친구
1757 | 친척
1758 | 칠십
1759 | 칠월
1760 | 칠판
1761 | 침대
1762 | 침묵
1763 | 침실
1764 | 칫솔
1765 | 칭찬
1766 | 카메라
1767 | 카운터
1768 | 칼국수
1769 | 캐릭터
1770 | 캠퍼스
1771 | 캠페인
1772 | 커튼
1773 | 컨디션
1774 | 컬러
1775 | 컴퓨터
1776 | 코끼리
1777 | 코미디
1778 | 콘서트
1779 | 콜라
1780 | 콤플렉스
1781 | 콩나물
1782 | 쾌감
1783 | 쿠데타
1784 | 크림
1785 | 큰길
1786 | 큰딸
1787 | 큰소리
1788 | 큰아들
1789 | 큰어머니
1790 | 큰일
1791 | 큰절
1792 | 클래식
1793 | 클럽
1794 | 킬로
1795 | 타입
1796 | 타자기
1797 | 탁구
1798 | 탁자
1799 | 탄생
1800 | 태권도
1801 | 태양
1802 | 태풍
1803 | 택시
1804 | 탤런트
1805 | 터널
1806 | 터미널
1807 | 테니스
1808 | 테스트
1809 | 테이블
1810 | 텔레비전
1811 | 토론
1812 | 토마토
1813 | 토요일
1814 | 통계
1815 | 통과
1816 | 통로
1817 | 통신
1818 | 통역
1819 | 통일
1820 | 통장
1821 | 통제
1822 | 통증
1823 | 통합
1824 | 통화
1825 | 퇴근
1826 | 퇴원
1827 | 퇴직금
1828 | 튀김
1829 | 트럭
1830 | 특급
1831 | 특별
1832 | 특성
1833 | 특수
1834 | 특징
1835 | 특히
1836 | 튼튼히
1837 | 티셔츠
1838 | 파란색
1839 | 파일
1840 | 파출소
1841 | 판결
1842 | 판단
1843 | 판매
1844 | 판사
1845 | 팔십
1846 | 팔월
1847 | 팝송
1848 | 패션
1849 | 팩스
1850 | 팩시밀리
1851 | 팬티
1852 | 퍼센트
1853 | 페인트
1854 | 편견
1855 | 편의
1856 | 편지
1857 | 편히
1858 | 평가
1859 | 평균
1860 | 평생
1861 | 평소
1862 | 평양
1863 | 평일
1864 | 평화
1865 | 포스터
1866 | 포인트
1867 | 포장
1868 | 포함
1869 | 표면
1870 | 표정
1871 | 표준
1872 | 표현
1873 | 품목
1874 | 품질
1875 | 풍경
1876 | 풍속
1877 | 풍습
1878 | 프랑스
1879 | 프린터
1880 | 플라스틱
1881 | 피곤
1882 | 피망
1883 | 피아노
1884 | 필름
1885 | 필수
1886 | 필요
1887 | 필자
1888 | 필통
1889 | 핑계
1890 | 하느님
1891 | 하늘
1892 | 하드웨어
1893 | 하룻밤
1894 | 하반기
1895 | 하숙집
1896 | 하순
1897 | 하여튼
1898 | 하지만
1899 | 하천
1900 | 하품
1901 | 하필
1902 | 학과
1903 | 학교
1904 | 학급
1905 | 학기
1906 | 학년
1907 | 학력
1908 | 학번
1909 | 학부모
1910 | 학비
1911 | 학생
1912 | 학술
1913 | 학습
1914 | 학용품
1915 | 학원
1916 | 학위
1917 | 학자
1918 | 학점
1919 | 한계
1920 | 한글
1921 | 한꺼번에
1922 | 한낮
1923 | 한눈
1924 | 한동안
1925 | 한때
1926 | 한라산
1927 | 한마디
1928 | 한문
1929 | 한번
1930 | 한복
1931 | 한식
1932 | 한여름
1933 | 한쪽
1934 | 할머니
1935 | 할아버지
1936 | 할인
1937 | 함께
1938 | 함부로
1939 | 합격
1940 | 합리적
1941 | 항공
1942 | 항구
1943 | 항상
1944 | 항의
1945 | 해결
1946 | 해군
1947 | 해답
1948 | 해당
1949 | 해물
1950 | 해석
1951 | 해설
1952 | 해수욕장
1953 | 해안
1954 | 핵심
1955 | 핸드백
1956 | 햄버거
1957 | 햇볕
1958 | 햇살
1959 | 행동
1960 | 행복
1961 | 행사
1962 | 행운
1963 | 행위
1964 | 향기
1965 | 향상
1966 | 향수
1967 | 허락
1968 | 허용
1969 | 헬기
1970 | 현관
1971 | 현금
1972 | 현대
1973 | 현상
1974 | 현실
1975 | 현장
1976 | 현재
1977 | 현지
1978 | 혈액
1979 | 협력
1980 | 형부
1981 | 형사
1982 | 형수
1983 | 형식
1984 | 형제
1985 | 형태
1986 | 형편
1987 | 혜택
1988 | 호기심
1989 | 호남
1990 | 호랑이
1991 | 호박
1992 | 호텔
1993 | 호흡
1994 | 혹시
1995 | 홀로
1996 | 홈페이지
1997 | 홍보
1998 | 홍수
1999 | 홍차
2000 | 화면
2001 | 화분
2002 | 화살
2003 | 화요일
2004 | 화장
2005 | 화학
2006 | 확보
2007 | 확인
2008 | 확장
2009 | 확정
2010 | 환갑
2011 | 환경
2012 | 환영
2013 | 환율
2014 | 환자
2015 | 활기
2016 | 활동
2017 | 활발히
2018 | 활용
2019 | 활짝
2020 | 회견
2021 | 회관
2022 | 회복
2023 | 회색
2024 | 회원
2025 | 회장
2026 | 회전
2027 | 횟수
2028 | 횡단보도
2029 | 효율적
2030 | 후반
2031 | 후춧가루
2032 | 훈련
2033 | 훨씬
2034 | 휴식
2035 | 휴일
2036 | 흉내
2037 | 흐름
2038 | 흑백
2039 | 흑인
2040 | 흔적
2041 | 흔히
2042 | 흥미
2043 | 흥분
2044 | 희곡
2045 | 희망
2046 | 희생
2047 | 흰색
2048 | 힘껏
--------------------------------------------------------------------------------
/src/main/resources/wordlists/spanish.txt:
--------------------------------------------------------------------------------
1 | ábaco
2 | abdomen
3 | abeja
4 | abierto
5 | abogado
6 | abono
7 | aborto
8 | abrazo
9 | abrir
10 | abuelo
11 | abuso
12 | acabar
13 | academia
14 | acceso
15 | acción
16 | aceite
17 | acelga
18 | acento
19 | aceptar
20 | ácido
21 | aclarar
22 | acné
23 | acoger
24 | acoso
25 | activo
26 | acto
27 | actriz
28 | actuar
29 | acudir
30 | acuerdo
31 | acusar
32 | adicto
33 | admitir
34 | adoptar
35 | adorno
36 | aduana
37 | adulto
38 | aéreo
39 | afectar
40 | afición
41 | afinar
42 | afirmar
43 | ágil
44 | agitar
45 | agonía
46 | agosto
47 | agotar
48 | agregar
49 | agrio
50 | agua
51 | agudo
52 | águila
53 | aguja
54 | ahogo
55 | ahorro
56 | aire
57 | aislar
58 | ajedrez
59 | ajeno
60 | ajuste
61 | alacrán
62 | alambre
63 | alarma
64 | alba
65 | álbum
66 | alcalde
67 | aldea
68 | alegre
69 | alejar
70 | alerta
71 | aleta
72 | alfiler
73 | alga
74 | algodón
75 | aliado
76 | aliento
77 | alivio
78 | alma
79 | almeja
80 | almíbar
81 | altar
82 | alteza
83 | altivo
84 | alto
85 | altura
86 | alumno
87 | alzar
88 | amable
89 | amante
90 | amapola
91 | amargo
92 | amasar
93 | ámbar
94 | ámbito
95 | ameno
96 | amigo
97 | amistad
98 | amor
99 | amparo
100 | amplio
101 | ancho
102 | anciano
103 | ancla
104 | andar
105 | andén
106 | anemia
107 | ángulo
108 | anillo
109 | ánimo
110 | anís
111 | anotar
112 | antena
113 | antiguo
114 | antojo
115 | anual
116 | anular
117 | anuncio
118 | añadir
119 | añejo
120 | año
121 | apagar
122 | aparato
123 | apetito
124 | apio
125 | aplicar
126 | apodo
127 | aporte
128 | apoyo
129 | aprender
130 | aprobar
131 | apuesta
132 | apuro
133 | arado
134 | araña
135 | arar
136 | árbitro
137 | árbol
138 | arbusto
139 | archivo
140 | arco
141 | arder
142 | ardilla
143 | arduo
144 | área
145 | árido
146 | aries
147 | armonía
148 | arnés
149 | aroma
150 | arpa
151 | arpón
152 | arreglo
153 | arroz
154 | arruga
155 | arte
156 | artista
157 | asa
158 | asado
159 | asalto
160 | ascenso
161 | asegurar
162 | aseo
163 | asesor
164 | asiento
165 | asilo
166 | asistir
167 | asno
168 | asombro
169 | áspero
170 | astilla
171 | astro
172 | astuto
173 | asumir
174 | asunto
175 | atajo
176 | ataque
177 | atar
178 | atento
179 | ateo
180 | ático
181 | atleta
182 | átomo
183 | atraer
184 | atroz
185 | atún
186 | audaz
187 | audio
188 | auge
189 | aula
190 | aumento
191 | ausente
192 | autor
193 | aval
194 | avance
195 | avaro
196 | ave
197 | avellana
198 | avena
199 | avestruz
200 | avión
201 | aviso
202 | ayer
203 | ayuda
204 | ayuno
205 | azafrán
206 | azar
207 | azote
208 | azúcar
209 | azufre
210 | azul
211 | baba
212 | babor
213 | bache
214 | bahía
215 | baile
216 | bajar
217 | balanza
218 | balcón
219 | balde
220 | bambú
221 | banco
222 | banda
223 | baño
224 | barba
225 | barco
226 | barniz
227 | barro
228 | báscula
229 | bastón
230 | basura
231 | batalla
232 | batería
233 | batir
234 | batuta
235 | baúl
236 | bazar
237 | bebé
238 | bebida
239 | bello
240 | besar
241 | beso
242 | bestia
243 | bicho
244 | bien
245 | bingo
246 | blanco
247 | bloque
248 | blusa
249 | boa
250 | bobina
251 | bobo
252 | boca
253 | bocina
254 | boda
255 | bodega
256 | boina
257 | bola
258 | bolero
259 | bolsa
260 | bomba
261 | bondad
262 | bonito
263 | bono
264 | bonsái
265 | borde
266 | borrar
267 | bosque
268 | bote
269 | botín
270 | bóveda
271 | bozal
272 | bravo
273 | brazo
274 | brecha
275 | breve
276 | brillo
277 | brinco
278 | brisa
279 | broca
280 | broma
281 | bronce
282 | brote
283 | bruja
284 | brusco
285 | bruto
286 | buceo
287 | bucle
288 | bueno
289 | buey
290 | bufanda
291 | bufón
292 | búho
293 | buitre
294 | bulto
295 | burbuja
296 | burla
297 | burro
298 | buscar
299 | butaca
300 | buzón
301 | caballo
302 | cabeza
303 | cabina
304 | cabra
305 | cacao
306 | cadáver
307 | cadena
308 | caer
309 | café
310 | caída
311 | caimán
312 | caja
313 | cajón
314 | cal
315 | calamar
316 | calcio
317 | caldo
318 | calidad
319 | calle
320 | calma
321 | calor
322 | calvo
323 | cama
324 | cambio
325 | camello
326 | camino
327 | campo
328 | cáncer
329 | candil
330 | canela
331 | canguro
332 | canica
333 | canto
334 | caña
335 | cañón
336 | caoba
337 | caos
338 | capaz
339 | capitán
340 | capote
341 | captar
342 | capucha
343 | cara
344 | carbón
345 | cárcel
346 | careta
347 | carga
348 | cariño
349 | carne
350 | carpeta
351 | carro
352 | carta
353 | casa
354 | casco
355 | casero
356 | caspa
357 | castor
358 | catorce
359 | catre
360 | caudal
361 | causa
362 | cazo
363 | cebolla
364 | ceder
365 | cedro
366 | celda
367 | célebre
368 | celoso
369 | célula
370 | cemento
371 | ceniza
372 | centro
373 | cerca
374 | cerdo
375 | cereza
376 | cero
377 | cerrar
378 | certeza
379 | césped
380 | cetro
381 | chacal
382 | chaleco
383 | champú
384 | chancla
385 | chapa
386 | charla
387 | chico
388 | chiste
389 | chivo
390 | choque
391 | choza
392 | chuleta
393 | chupar
394 | ciclón
395 | ciego
396 | cielo
397 | cien
398 | cierto
399 | cifra
400 | cigarro
401 | cima
402 | cinco
403 | cine
404 | cinta
405 | ciprés
406 | circo
407 | ciruela
408 | cisne
409 | cita
410 | ciudad
411 | clamor
412 | clan
413 | claro
414 | clase
415 | clave
416 | cliente
417 | clima
418 | clínica
419 | cobre
420 | cocción
421 | cochino
422 | cocina
423 | coco
424 | código
425 | codo
426 | cofre
427 | coger
428 | cohete
429 | cojín
430 | cojo
431 | cola
432 | colcha
433 | colegio
434 | colgar
435 | colina
436 | collar
437 | colmo
438 | columna
439 | combate
440 | comer
441 | comida
442 | cómodo
443 | compra
444 | conde
445 | conejo
446 | conga
447 | conocer
448 | consejo
449 | contar
450 | copa
451 | copia
452 | corazón
453 | corbata
454 | corcho
455 | cordón
456 | corona
457 | correr
458 | coser
459 | cosmos
460 | costa
461 | cráneo
462 | cráter
463 | crear
464 | crecer
465 | creído
466 | crema
467 | cría
468 | crimen
469 | cripta
470 | crisis
471 | cromo
472 | crónica
473 | croqueta
474 | crudo
475 | cruz
476 | cuadro
477 | cuarto
478 | cuatro
479 | cubo
480 | cubrir
481 | cuchara
482 | cuello
483 | cuento
484 | cuerda
485 | cuesta
486 | cueva
487 | cuidar
488 | culebra
489 | culpa
490 | culto
491 | cumbre
492 | cumplir
493 | cuna
494 | cuneta
495 | cuota
496 | cupón
497 | cúpula
498 | curar
499 | curioso
500 | curso
501 | curva
502 | cutis
503 | dama
504 | danza
505 | dar
506 | dardo
507 | dátil
508 | deber
509 | débil
510 | década
511 | decir
512 | dedo
513 | defensa
514 | definir
515 | dejar
516 | delfín
517 | delgado
518 | delito
519 | demora
520 | denso
521 | dental
522 | deporte
523 | derecho
524 | derrota
525 | desayuno
526 | deseo
527 | desfile
528 | desnudo
529 | destino
530 | desvío
531 | detalle
532 | detener
533 | deuda
534 | día
535 | diablo
536 | diadema
537 | diamante
538 | diana
539 | diario
540 | dibujo
541 | dictar
542 | diente
543 | dieta
544 | diez
545 | difícil
546 | digno
547 | dilema
548 | diluir
549 | dinero
550 | directo
551 | dirigir
552 | disco
553 | diseño
554 | disfraz
555 | diva
556 | divino
557 | doble
558 | doce
559 | dolor
560 | domingo
561 | don
562 | donar
563 | dorado
564 | dormir
565 | dorso
566 | dos
567 | dosis
568 | dragón
569 | droga
570 | ducha
571 | duda
572 | duelo
573 | dueño
574 | dulce
575 | dúo
576 | duque
577 | durar
578 | dureza
579 | duro
580 | ébano
581 | ebrio
582 | echar
583 | eco
584 | ecuador
585 | edad
586 | edición
587 | edificio
588 | editor
589 | educar
590 | efecto
591 | eficaz
592 | eje
593 | ejemplo
594 | elefante
595 | elegir
596 | elemento
597 | elevar
598 | elipse
599 | élite
600 | elixir
601 | elogio
602 | eludir
603 | embudo
604 | emitir
605 | emoción
606 | empate
607 | empeño
608 | empleo
609 | empresa
610 | enano
611 | encargo
612 | enchufe
613 | encía
614 | enemigo
615 | enero
616 | enfado
617 | enfermo
618 | engaño
619 | enigma
620 | enlace
621 | enorme
622 | enredo
623 | ensayo
624 | enseñar
625 | entero
626 | entrar
627 | envase
628 | envío
629 | época
630 | equipo
631 | erizo
632 | escala
633 | escena
634 | escolar
635 | escribir
636 | escudo
637 | esencia
638 | esfera
639 | esfuerzo
640 | espada
641 | espejo
642 | espía
643 | esposa
644 | espuma
645 | esquí
646 | estar
647 | este
648 | estilo
649 | estufa
650 | etapa
651 | eterno
652 | ética
653 | etnia
654 | evadir
655 | evaluar
656 | evento
657 | evitar
658 | exacto
659 | examen
660 | exceso
661 | excusa
662 | exento
663 | exigir
664 | exilio
665 | existir
666 | éxito
667 | experto
668 | explicar
669 | exponer
670 | extremo
671 | fábrica
672 | fábula
673 | fachada
674 | fácil
675 | factor
676 | faena
677 | faja
678 | falda
679 | fallo
680 | falso
681 | faltar
682 | fama
683 | familia
684 | famoso
685 | faraón
686 | farmacia
687 | farol
688 | farsa
689 | fase
690 | fatiga
691 | fauna
692 | favor
693 | fax
694 | febrero
695 | fecha
696 | feliz
697 | feo
698 | feria
699 | feroz
700 | fértil
701 | fervor
702 | festín
703 | fiable
704 | fianza
705 | fiar
706 | fibra
707 | ficción
708 | ficha
709 | fideo
710 | fiebre
711 | fiel
712 | fiera
713 | fiesta
714 | figura
715 | fijar
716 | fijo
717 | fila
718 | filete
719 | filial
720 | filtro
721 | fin
722 | finca
723 | fingir
724 | finito
725 | firma
726 | flaco
727 | flauta
728 | flecha
729 | flor
730 | flota
731 | fluir
732 | flujo
733 | flúor
734 | fobia
735 | foca
736 | fogata
737 | fogón
738 | folio
739 | folleto
740 | fondo
741 | forma
742 | forro
743 | fortuna
744 | forzar
745 | fosa
746 | foto
747 | fracaso
748 | frágil
749 | franja
750 | frase
751 | fraude
752 | freír
753 | freno
754 | fresa
755 | frío
756 | frito
757 | fruta
758 | fuego
759 | fuente
760 | fuerza
761 | fuga
762 | fumar
763 | función
764 | funda
765 | furgón
766 | furia
767 | fusil
768 | fútbol
769 | futuro
770 | gacela
771 | gafas
772 | gaita
773 | gajo
774 | gala
775 | galería
776 | gallo
777 | gamba
778 | ganar
779 | gancho
780 | ganga
781 | ganso
782 | garaje
783 | garza
784 | gasolina
785 | gastar
786 | gato
787 | gavilán
788 | gemelo
789 | gemir
790 | gen
791 | género
792 | genio
793 | gente
794 | geranio
795 | gerente
796 | germen
797 | gesto
798 | gigante
799 | gimnasio
800 | girar
801 | giro
802 | glaciar
803 | globo
804 | gloria
805 | gol
806 | golfo
807 | goloso
808 | golpe
809 | goma
810 | gordo
811 | gorila
812 | gorra
813 | gota
814 | goteo
815 | gozar
816 | grada
817 | gráfico
818 | grano
819 | grasa
820 | gratis
821 | grave
822 | grieta
823 | grillo
824 | gripe
825 | gris
826 | grito
827 | grosor
828 | grúa
829 | grueso
830 | grumo
831 | grupo
832 | guante
833 | guapo
834 | guardia
835 | guerra
836 | guía
837 | guiño
838 | guion
839 | guiso
840 | guitarra
841 | gusano
842 | gustar
843 | haber
844 | hábil
845 | hablar
846 | hacer
847 | hacha
848 | hada
849 | hallar
850 | hamaca
851 | harina
852 | haz
853 | hazaña
854 | hebilla
855 | hebra
856 | hecho
857 | helado
858 | helio
859 | hembra
860 | herir
861 | hermano
862 | héroe
863 | hervir
864 | hielo
865 | hierro
866 | hígado
867 | higiene
868 | hijo
869 | himno
870 | historia
871 | hocico
872 | hogar
873 | hoguera
874 | hoja
875 | hombre
876 | hongo
877 | honor
878 | honra
879 | hora
880 | hormiga
881 | horno
882 | hostil
883 | hoyo
884 | hueco
885 | huelga
886 | huerta
887 | hueso
888 | huevo
889 | huida
890 | huir
891 | humano
892 | húmedo
893 | humilde
894 | humo
895 | hundir
896 | huracán
897 | hurto
898 | icono
899 | ideal
900 | idioma
901 | ídolo
902 | iglesia
903 | iglú
904 | igual
905 | ilegal
906 | ilusión
907 | imagen
908 | imán
909 | imitar
910 | impar
911 | imperio
912 | imponer
913 | impulso
914 | incapaz
915 | índice
916 | inerte
917 | infiel
918 | informe
919 | ingenio
920 | inicio
921 | inmenso
922 | inmune
923 | innato
924 | insecto
925 | instante
926 | interés
927 | íntimo
928 | intuir
929 | inútil
930 | invierno
931 | ira
932 | iris
933 | ironía
934 | isla
935 | islote
936 | jabalí
937 | jabón
938 | jamón
939 | jarabe
940 | jardín
941 | jarra
942 | jaula
943 | jazmín
944 | jefe
945 | jeringa
946 | jinete
947 | jornada
948 | joroba
949 | joven
950 | joya
951 | juerga
952 | jueves
953 | juez
954 | jugador
955 | jugo
956 | juguete
957 | juicio
958 | junco
959 | jungla
960 | junio
961 | juntar
962 | júpiter
963 | jurar
964 | justo
965 | juvenil
966 | juzgar
967 | kilo
968 | koala
969 | labio
970 | lacio
971 | lacra
972 | lado
973 | ladrón
974 | lagarto
975 | lágrima
976 | laguna
977 | laico
978 | lamer
979 | lámina
980 | lámpara
981 | lana
982 | lancha
983 | langosta
984 | lanza
985 | lápiz
986 | largo
987 | larva
988 | lástima
989 | lata
990 | látex
991 | latir
992 | laurel
993 | lavar
994 | lazo
995 | leal
996 | lección
997 | leche
998 | lector
999 | leer
1000 | legión
1001 | legumbre
1002 | lejano
1003 | lengua
1004 | lento
1005 | leña
1006 | león
1007 | leopardo
1008 | lesión
1009 | letal
1010 | letra
1011 | leve
1012 | leyenda
1013 | libertad
1014 | libro
1015 | licor
1016 | líder
1017 | lidiar
1018 | lienzo
1019 | liga
1020 | ligero
1021 | lima
1022 | límite
1023 | limón
1024 | limpio
1025 | lince
1026 | lindo
1027 | línea
1028 | lingote
1029 | lino
1030 | linterna
1031 | líquido
1032 | liso
1033 | lista
1034 | litera
1035 | litio
1036 | litro
1037 | llaga
1038 | llama
1039 | llanto
1040 | llave
1041 | llegar
1042 | llenar
1043 | llevar
1044 | llorar
1045 | llover
1046 | lluvia
1047 | lobo
1048 | loción
1049 | loco
1050 | locura
1051 | lógica
1052 | logro
1053 | lombriz
1054 | lomo
1055 | lonja
1056 | lote
1057 | lucha
1058 | lucir
1059 | lugar
1060 | lujo
1061 | luna
1062 | lunes
1063 | lupa
1064 | lustro
1065 | luto
1066 | luz
1067 | maceta
1068 | macho
1069 | madera
1070 | madre
1071 | maduro
1072 | maestro
1073 | mafia
1074 | magia
1075 | mago
1076 | maíz
1077 | maldad
1078 | maleta
1079 | malla
1080 | malo
1081 | mamá
1082 | mambo
1083 | mamut
1084 | manco
1085 | mando
1086 | manejar
1087 | manga
1088 | maniquí
1089 | manjar
1090 | mano
1091 | manso
1092 | manta
1093 | mañana
1094 | mapa
1095 | máquina
1096 | mar
1097 | marco
1098 | marea
1099 | marfil
1100 | margen
1101 | marido
1102 | mármol
1103 | marrón
1104 | martes
1105 | marzo
1106 | masa
1107 | máscara
1108 | masivo
1109 | matar
1110 | materia
1111 | matiz
1112 | matriz
1113 | máximo
1114 | mayor
1115 | mazorca
1116 | mecha
1117 | medalla
1118 | medio
1119 | médula
1120 | mejilla
1121 | mejor
1122 | melena
1123 | melón
1124 | memoria
1125 | menor
1126 | mensaje
1127 | mente
1128 | menú
1129 | mercado
1130 | merengue
1131 | mérito
1132 | mes
1133 | mesón
1134 | meta
1135 | meter
1136 | método
1137 | metro
1138 | mezcla
1139 | miedo
1140 | miel
1141 | miembro
1142 | miga
1143 | mil
1144 | milagro
1145 | militar
1146 | millón
1147 | mimo
1148 | mina
1149 | minero
1150 | mínimo
1151 | minuto
1152 | miope
1153 | mirar
1154 | misa
1155 | miseria
1156 | misil
1157 | mismo
1158 | mitad
1159 | mito
1160 | mochila
1161 | moción
1162 | moda
1163 | modelo
1164 | moho
1165 | mojar
1166 | molde
1167 | moler
1168 | molino
1169 | momento
1170 | momia
1171 | monarca
1172 | moneda
1173 | monja
1174 | monto
1175 | moño
1176 | morada
1177 | morder
1178 | moreno
1179 | morir
1180 | morro
1181 | morsa
1182 | mortal
1183 | mosca
1184 | mostrar
1185 | motivo
1186 | mover
1187 | móvil
1188 | mozo
1189 | mucho
1190 | mudar
1191 | mueble
1192 | muela
1193 | muerte
1194 | muestra
1195 | mugre
1196 | mujer
1197 | mula
1198 | muleta
1199 | multa
1200 | mundo
1201 | muñeca
1202 | mural
1203 | muro
1204 | músculo
1205 | museo
1206 | musgo
1207 | música
1208 | muslo
1209 | nácar
1210 | nación
1211 | nadar
1212 | naipe
1213 | naranja
1214 | nariz
1215 | narrar
1216 | nasal
1217 | natal
1218 | nativo
1219 | natural
1220 | náusea
1221 | naval
1222 | nave
1223 | navidad
1224 | necio
1225 | néctar
1226 | negar
1227 | negocio
1228 | negro
1229 | neón
1230 | nervio
1231 | neto
1232 | neutro
1233 | nevar
1234 | nevera
1235 | nicho
1236 | nido
1237 | niebla
1238 | nieto
1239 | niñez
1240 | niño
1241 | nítido
1242 | nivel
1243 | nobleza
1244 | noche
1245 | nómina
1246 | noria
1247 | norma
1248 | norte
1249 | nota
1250 | noticia
1251 | novato
1252 | novela
1253 | novio
1254 | nube
1255 | nuca
1256 | núcleo
1257 | nudillo
1258 | nudo
1259 | nuera
1260 | nueve
1261 | nuez
1262 | nulo
1263 | número
1264 | nutria
1265 | oasis
1266 | obeso
1267 | obispo
1268 | objeto
1269 | obra
1270 | obrero
1271 | observar
1272 | obtener
1273 | obvio
1274 | oca
1275 | ocaso
1276 | océano
1277 | ochenta
1278 | ocho
1279 | ocio
1280 | ocre
1281 | octavo
1282 | octubre
1283 | oculto
1284 | ocupar
1285 | ocurrir
1286 | odiar
1287 | odio
1288 | odisea
1289 | oeste
1290 | ofensa
1291 | oferta
1292 | oficio
1293 | ofrecer
1294 | ogro
1295 | oído
1296 | oír
1297 | ojo
1298 | ola
1299 | oleada
1300 | olfato
1301 | olivo
1302 | olla
1303 | olmo
1304 | olor
1305 | olvido
1306 | ombligo
1307 | onda
1308 | onza
1309 | opaco
1310 | opción
1311 | ópera
1312 | opinar
1313 | oponer
1314 | optar
1315 | óptica
1316 | opuesto
1317 | oración
1318 | orador
1319 | oral
1320 | órbita
1321 | orca
1322 | orden
1323 | oreja
1324 | órgano
1325 | orgía
1326 | orgullo
1327 | oriente
1328 | origen
1329 | orilla
1330 | oro
1331 | orquesta
1332 | oruga
1333 | osadía
1334 | oscuro
1335 | osezno
1336 | oso
1337 | ostra
1338 | otoño
1339 | otro
1340 | oveja
1341 | óvulo
1342 | óxido
1343 | oxígeno
1344 | oyente
1345 | ozono
1346 | pacto
1347 | padre
1348 | paella
1349 | página
1350 | pago
1351 | país
1352 | pájaro
1353 | palabra
1354 | palco
1355 | paleta
1356 | pálido
1357 | palma
1358 | paloma
1359 | palpar
1360 | pan
1361 | panal
1362 | pánico
1363 | pantera
1364 | pañuelo
1365 | papá
1366 | papel
1367 | papilla
1368 | paquete
1369 | parar
1370 | parcela
1371 | pared
1372 | parir
1373 | paro
1374 | párpado
1375 | parque
1376 | párrafo
1377 | parte
1378 | pasar
1379 | paseo
1380 | pasión
1381 | paso
1382 | pasta
1383 | pata
1384 | patio
1385 | patria
1386 | pausa
1387 | pauta
1388 | pavo
1389 | payaso
1390 | peatón
1391 | pecado
1392 | pecera
1393 | pecho
1394 | pedal
1395 | pedir
1396 | pegar
1397 | peine
1398 | pelar
1399 | peldaño
1400 | pelea
1401 | peligro
1402 | pellejo
1403 | pelo
1404 | peluca
1405 | pena
1406 | pensar
1407 | peñón
1408 | peón
1409 | peor
1410 | pepino
1411 | pequeño
1412 | pera
1413 | percha
1414 | perder
1415 | pereza
1416 | perfil
1417 | perico
1418 | perla
1419 | permiso
1420 | perro
1421 | persona
1422 | pesa
1423 | pesca
1424 | pésimo
1425 | pestaña
1426 | pétalo
1427 | petróleo
1428 | pez
1429 | pezuña
1430 | picar
1431 | pichón
1432 | pie
1433 | piedra
1434 | pierna
1435 | pieza
1436 | pijama
1437 | pilar
1438 | piloto
1439 | pimienta
1440 | pino
1441 | pintor
1442 | pinza
1443 | piña
1444 | piojo
1445 | pipa
1446 | pirata
1447 | pisar
1448 | piscina
1449 | piso
1450 | pista
1451 | pitón
1452 | pizca
1453 | placa
1454 | plan
1455 | plata
1456 | playa
1457 | plaza
1458 | pleito
1459 | pleno
1460 | plomo
1461 | pluma
1462 | plural
1463 | pobre
1464 | poco
1465 | poder
1466 | podio
1467 | poema
1468 | poesía
1469 | poeta
1470 | polen
1471 | policía
1472 | pollo
1473 | polvo
1474 | pomada
1475 | pomelo
1476 | pomo
1477 | pompa
1478 | poner
1479 | porción
1480 | portal
1481 | posada
1482 | poseer
1483 | posible
1484 | poste
1485 | potencia
1486 | potro
1487 | pozo
1488 | prado
1489 | precoz
1490 | pregunta
1491 | premio
1492 | prensa
1493 | preso
1494 | previo
1495 | primo
1496 | príncipe
1497 | prisión
1498 | privar
1499 | proa
1500 | probar
1501 | proceso
1502 | producto
1503 | proeza
1504 | profesor
1505 | programa
1506 | prole
1507 | promesa
1508 | pronto
1509 | propio
1510 | próximo
1511 | prueba
1512 | público
1513 | puchero
1514 | pudor
1515 | pueblo
1516 | puerta
1517 | puesto
1518 | pulga
1519 | pulir
1520 | pulmón
1521 | pulpo
1522 | pulso
1523 | puma
1524 | punto
1525 | puñal
1526 | puño
1527 | pupa
1528 | pupila
1529 | puré
1530 | quedar
1531 | queja
1532 | quemar
1533 | querer
1534 | queso
1535 | quieto
1536 | química
1537 | quince
1538 | quitar
1539 | rábano
1540 | rabia
1541 | rabo
1542 | ración
1543 | radical
1544 | raíz
1545 | rama
1546 | rampa
1547 | rancho
1548 | rango
1549 | rapaz
1550 | rápido
1551 | rapto
1552 | rasgo
1553 | raspa
1554 | rato
1555 | rayo
1556 | raza
1557 | razón
1558 | reacción
1559 | realidad
1560 | rebaño
1561 | rebote
1562 | recaer
1563 | receta
1564 | rechazo
1565 | recoger
1566 | recreo
1567 | recto
1568 | recurso
1569 | red
1570 | redondo
1571 | reducir
1572 | reflejo
1573 | reforma
1574 | refrán
1575 | refugio
1576 | regalo
1577 | regir
1578 | regla
1579 | regreso
1580 | rehén
1581 | reino
1582 | reír
1583 | reja
1584 | relato
1585 | relevo
1586 | relieve
1587 | relleno
1588 | reloj
1589 | remar
1590 | remedio
1591 | remo
1592 | rencor
1593 | rendir
1594 | renta
1595 | reparto
1596 | repetir
1597 | reposo
1598 | reptil
1599 | res
1600 | rescate
1601 | resina
1602 | respeto
1603 | resto
1604 | resumen
1605 | retiro
1606 | retorno
1607 | retrato
1608 | reunir
1609 | revés
1610 | revista
1611 | rey
1612 | rezar
1613 | rico
1614 | riego
1615 | rienda
1616 | riesgo
1617 | rifa
1618 | rígido
1619 | rigor
1620 | rincón
1621 | riñón
1622 | río
1623 | riqueza
1624 | risa
1625 | ritmo
1626 | rito
1627 | rizo
1628 | roble
1629 | roce
1630 | rociar
1631 | rodar
1632 | rodeo
1633 | rodilla
1634 | roer
1635 | rojizo
1636 | rojo
1637 | romero
1638 | romper
1639 | ron
1640 | ronco
1641 | ronda
1642 | ropa
1643 | ropero
1644 | rosa
1645 | rosca
1646 | rostro
1647 | rotar
1648 | rubí
1649 | rubor
1650 | rudo
1651 | rueda
1652 | rugir
1653 | ruido
1654 | ruina
1655 | ruleta
1656 | rulo
1657 | rumbo
1658 | rumor
1659 | ruptura
1660 | ruta
1661 | rutina
1662 | sábado
1663 | saber
1664 | sabio
1665 | sable
1666 | sacar
1667 | sagaz
1668 | sagrado
1669 | sala
1670 | saldo
1671 | salero
1672 | salir
1673 | salmón
1674 | salón
1675 | salsa
1676 | salto
1677 | salud
1678 | salvar
1679 | samba
1680 | sanción
1681 | sandía
1682 | sanear
1683 | sangre
1684 | sanidad
1685 | sano
1686 | santo
1687 | sapo
1688 | saque
1689 | sardina
1690 | sartén
1691 | sastre
1692 | satán
1693 | sauna
1694 | saxofón
1695 | sección
1696 | seco
1697 | secreto
1698 | secta
1699 | sed
1700 | seguir
1701 | seis
1702 | sello
1703 | selva
1704 | semana
1705 | semilla
1706 | senda
1707 | sensor
1708 | señal
1709 | señor
1710 | separar
1711 | sepia
1712 | sequía
1713 | ser
1714 | serie
1715 | sermón
1716 | servir
1717 | sesenta
1718 | sesión
1719 | seta
1720 | setenta
1721 | severo
1722 | sexo
1723 | sexto
1724 | sidra
1725 | siesta
1726 | siete
1727 | siglo
1728 | signo
1729 | sílaba
1730 | silbar
1731 | silencio
1732 | silla
1733 | símbolo
1734 | simio
1735 | sirena
1736 | sistema
1737 | sitio
1738 | situar
1739 | sobre
1740 | socio
1741 | sodio
1742 | sol
1743 | solapa
1744 | soldado
1745 | soledad
1746 | sólido
1747 | soltar
1748 | solución
1749 | sombra
1750 | sondeo
1751 | sonido
1752 | sonoro
1753 | sonrisa
1754 | sopa
1755 | soplar
1756 | soporte
1757 | sordo
1758 | sorpresa
1759 | sorteo
1760 | sostén
1761 | sótano
1762 | suave
1763 | subir
1764 | suceso
1765 | sudor
1766 | suegra
1767 | suelo
1768 | sueño
1769 | suerte
1770 | sufrir
1771 | sujeto
1772 | sultán
1773 | sumar
1774 | superar
1775 | suplir
1776 | suponer
1777 | supremo
1778 | sur
1779 | surco
1780 | sureño
1781 | surgir
1782 | susto
1783 | sutil
1784 | tabaco
1785 | tabique
1786 | tabla
1787 | tabú
1788 | taco
1789 | tacto
1790 | tajo
1791 | talar
1792 | talco
1793 | talento
1794 | talla
1795 | talón
1796 | tamaño
1797 | tambor
1798 | tango
1799 | tanque
1800 | tapa
1801 | tapete
1802 | tapia
1803 | tapón
1804 | taquilla
1805 | tarde
1806 | tarea
1807 | tarifa
1808 | tarjeta
1809 | tarot
1810 | tarro
1811 | tarta
1812 | tatuaje
1813 | tauro
1814 | taza
1815 | tazón
1816 | teatro
1817 | techo
1818 | tecla
1819 | técnica
1820 | tejado
1821 | tejer
1822 | tejido
1823 | tela
1824 | teléfono
1825 | tema
1826 | temor
1827 | templo
1828 | tenaz
1829 | tender
1830 | tener
1831 | tenis
1832 | tenso
1833 | teoría
1834 | terapia
1835 | terco
1836 | término
1837 | ternura
1838 | terror
1839 | tesis
1840 | tesoro
1841 | testigo
1842 | tetera
1843 | texto
1844 | tez
1845 | tibio
1846 | tiburón
1847 | tiempo
1848 | tienda
1849 | tierra
1850 | tieso
1851 | tigre
1852 | tijera
1853 | tilde
1854 | timbre
1855 | tímido
1856 | timo
1857 | tinta
1858 | tío
1859 | típico
1860 | tipo
1861 | tira
1862 | tirón
1863 | titán
1864 | títere
1865 | título
1866 | tiza
1867 | toalla
1868 | tobillo
1869 | tocar
1870 | tocino
1871 | todo
1872 | toga
1873 | toldo
1874 | tomar
1875 | tono
1876 | tonto
1877 | topar
1878 | tope
1879 | toque
1880 | tórax
1881 | torero
1882 | tormenta
1883 | torneo
1884 | toro
1885 | torpedo
1886 | torre
1887 | torso
1888 | tortuga
1889 | tos
1890 | tosco
1891 | toser
1892 | tóxico
1893 | trabajo
1894 | tractor
1895 | traer
1896 | tráfico
1897 | trago
1898 | traje
1899 | tramo
1900 | trance
1901 | trato
1902 | trauma
1903 | trazar
1904 | trébol
1905 | tregua
1906 | treinta
1907 | tren
1908 | trepar
1909 | tres
1910 | tribu
1911 | trigo
1912 | tripa
1913 | triste
1914 | triunfo
1915 | trofeo
1916 | trompa
1917 | tronco
1918 | tropa
1919 | trote
1920 | trozo
1921 | truco
1922 | trueno
1923 | trufa
1924 | tubería
1925 | tubo
1926 | tuerto
1927 | tumba
1928 | tumor
1929 | túnel
1930 | túnica
1931 | turbina
1932 | turismo
1933 | turno
1934 | tutor
1935 | ubicar
1936 | úlcera
1937 | umbral
1938 | unidad
1939 | unir
1940 | universo
1941 | uno
1942 | untar
1943 | uña
1944 | urbano
1945 | urbe
1946 | urgente
1947 | urna
1948 | usar
1949 | usuario
1950 | útil
1951 | utopía
1952 | uva
1953 | vaca
1954 | vacío
1955 | vacuna
1956 | vagar
1957 | vago
1958 | vaina
1959 | vajilla
1960 | vale
1961 | válido
1962 | valle
1963 | valor
1964 | válvula
1965 | vampiro
1966 | vara
1967 | variar
1968 | varón
1969 | vaso
1970 | vecino
1971 | vector
1972 | vehículo
1973 | veinte
1974 | vejez
1975 | vela
1976 | velero
1977 | veloz
1978 | vena
1979 | vencer
1980 | venda
1981 | veneno
1982 | vengar
1983 | venir
1984 | venta
1985 | venus
1986 | ver
1987 | verano
1988 | verbo
1989 | verde
1990 | vereda
1991 | verja
1992 | verso
1993 | verter
1994 | vía
1995 | viaje
1996 | vibrar
1997 | vicio
1998 | víctima
1999 | vida
2000 | vídeo
2001 | vidrio
2002 | viejo
2003 | viernes
2004 | vigor
2005 | vil
2006 | villa
2007 | vinagre
2008 | vino
2009 | viñedo
2010 | violín
2011 | viral
2012 | virgo
2013 | virtud
2014 | visor
2015 | víspera
2016 | vista
2017 | vitamina
2018 | viudo
2019 | vivaz
2020 | vivero
2021 | vivir
2022 | vivo
2023 | volcán
2024 | volumen
2025 | volver
2026 | voraz
2027 | votar
2028 | voto
2029 | voz
2030 | vuelo
2031 | vulgar
2032 | yacer
2033 | yate
2034 | yegua
2035 | yema
2036 | yerno
2037 | yeso
2038 | yodo
2039 | yoga
2040 | yogur
2041 | zafiro
2042 | zanja
2043 | zapato
2044 | zarza
2045 | zona
2046 | zorro
2047 | zumo
2048 | zurdo
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/Base58.java:
--------------------------------------------------------------------------------
1 | package com.github.orogvany.bip32;
2 | /*
3 | * Copyright 2011 Google Inc.
4 | * Copyright 2018 Andreas Schildbach
5 | *
6 | * Licensed under the Apache License, Version 2.0 (the "License");
7 | * you may not use this file except in compliance with the License.
8 | * You may obtain a copy of the License at
9 | *
10 | * http://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing, software
13 | * distributed under the License is distributed on an "AS IS" BASIS,
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | * See the License for the specific language governing permissions and
16 | * limitations under the License.
17 | */
18 |
19 | import com.github.orogvany.bip32.crypto.Hash;
20 |
21 | import java.util.Arrays;
22 |
23 | public class Base58 {
24 | public static final char[] ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".toCharArray();
25 | private static final char ENCODED_ZERO = ALPHABET[0];
26 | private static final int[] INDEXES = new int[128];
27 |
28 | static {
29 | Arrays.fill(INDEXES, -1);
30 | for (int i = 0; i < ALPHABET.length; i++) {
31 | INDEXES[ALPHABET[i]] = i;
32 | }
33 | }
34 |
35 | /**
36 | * Encodes the given bytes as a base58 string (no checksum is appended).
37 | *
38 | * @param input the bytes to encode
39 | * @return the base58-encoded string
40 | */
41 | public static String encode(byte[] input) {
42 | if (input.length == 0) {
43 | return "";
44 | }
45 | // Count leading zeros.
46 | int zeros = 0;
47 | while (zeros < input.length && input[zeros] == 0) {
48 | ++zeros;
49 | }
50 | // Convert base-256 digits to base-58 digits (plus conversion to ASCII
51 | // characters)
52 | input = Arrays.copyOf(input, input.length); // since we modify it in-place
53 | char[] encoded = new char[input.length * 2]; // upper bound
54 | int outputStart = encoded.length;
55 | for (int inputStart = zeros; inputStart < input.length; ) {
56 | encoded[--outputStart] = ALPHABET[divmod(input, inputStart, 256, 58)];
57 | if (input[inputStart] == 0) {
58 | ++inputStart; // optimization - skip leading zeros
59 | }
60 | }
61 | // Preserve exactly as many leading encoded zeros in output as there were
62 | // leading zeros in input.
63 | while (outputStart < encoded.length && encoded[outputStart] == ENCODED_ZERO) {
64 | ++outputStart;
65 | }
66 | while (--zeros >= 0) {
67 | encoded[--outputStart] = ENCODED_ZERO;
68 | }
69 | // Return encoded string (including encoded leading zeros).
70 | return new String(encoded, outputStart, encoded.length - outputStart);
71 | }
72 |
73 | /**
74 | * Encodes the given version and bytes as a base58 string. A checksum is
75 | * appended.
76 | *
77 | * @param version the version to encode
78 | * @param payload the bytes to encode, e.g. pubkey hash
79 | * @return the base58-encoded string
80 | */
81 | public static String encodeChecked(int version, byte[] payload) {
82 | if (version < 0 || version > 255)
83 | throw new IllegalArgumentException("Version not in range.");
84 |
85 | // A stringified buffer is:
86 | // 1 byte version + data bytes + 4 bytes check code (a truncated hash)
87 | byte[] addressBytes = new byte[1 + payload.length + 4];
88 | addressBytes[0] = (byte) version;
89 | System.arraycopy(payload, 0, addressBytes, 1, payload.length);
90 | byte[] checksum = Hash.sha256Twice(addressBytes, 0, payload.length + 1);
91 | System.arraycopy(checksum, 0, addressBytes, payload.length + 1, 4);
92 | return Base58.encode(addressBytes);
93 | }
94 |
95 | /**
96 | * Decodes the given base58 string into the original data bytes.
97 | *
98 | * @param input the base58-encoded string to decode
99 | * @return the decoded data bytes
100 | */
101 | public static byte[] decode(String input) {
102 | if (input.length() == 0) {
103 | return new byte[0];
104 | }
105 | // Convert the base58-encoded ASCII chars to a base58 byte sequence (base58
106 | // digits).
107 | byte[] input58 = new byte[input.length()];
108 | for (int i = 0; i < input.length(); ++i) {
109 | char c = input.charAt(i);
110 | int digit = c < 128 ? INDEXES[c] : -1;
111 | if (digit < 0) {
112 | throw new RuntimeException();
113 | }
114 | input58[i] = (byte) digit;
115 | }
116 | // Count leading zeros.
117 | int zeros = 0;
118 | while (zeros < input58.length && input58[zeros] == 0) {
119 | ++zeros;
120 | }
121 | // Convert base-58 digits to base-256 digits.
122 | byte[] decoded = new byte[input.length()];
123 | int outputStart = decoded.length;
124 | for (int inputStart = zeros; inputStart < input58.length; ) {
125 | decoded[--outputStart] = divmod(input58, inputStart, 58, 256);
126 | if (input58[inputStart] == 0) {
127 | ++inputStart; // optimization - skip leading zeros
128 | }
129 | }
130 | // Ignore extra leading zeroes that were added during the calculation.
131 | while (outputStart < decoded.length && decoded[outputStart] == 0) {
132 | ++outputStart;
133 | }
134 | // Return decoded data (including original number of leading zeros).
135 | return Arrays.copyOfRange(decoded, outputStart - zeros, decoded.length);
136 | }
137 |
138 | /**
139 | * Divides a number, represented as an array of bytes each containing a single
140 | * digit
141 | * in the specified base, by the given divisor. The given number is modified
142 | * in-place
143 | * to contain the quotient, and the return value is the remainder.
144 | *
145 | * @param number the number to divide
146 | * @param firstDigit the index within the array of the first non-zero digit
147 | * (this is used for optimization by skipping the leading zeros)
148 | * @param base the base in which the number's digits are represented (up to
149 | * 256)
150 | * @param divisor the number to divide by (up to 256)
151 | * @return the remainder of the division operation
152 | */
153 | private static byte divmod(byte[] number, int firstDigit, int base, int
154 | divisor) {
155 | // this is just long division which accounts for the base of the input digits
156 | int remainder = 0;
157 | for (int i = firstDigit; i < number.length; i++) {
158 | int digit = (int) number[i] & 0xFF;
159 | int temp = remainder * base + digit;
160 | number[i] = (byte) (temp / divisor);
161 | remainder = temp % divisor;
162 | }
163 | return (byte) remainder;
164 | }
165 | }
166 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/BaseVectorTest.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.wallet.CoinType;
10 | import com.github.orogvany.bip32.wallet.HdAddress;
11 | import com.github.orogvany.bip32.wallet.HdKeyGenerator;
12 |
13 | import java.io.UnsupportedEncodingException;
14 |
15 | public abstract class BaseVectorTest {
16 |
17 | public HdAddress masterNode;
18 | public HdKeyGenerator hdKeyGenerator = new HdKeyGenerator();
19 |
20 | public BaseVectorTest() throws UnsupportedEncodingException {
21 | masterNode = hdKeyGenerator.getAddressFromSeed(getSeed(), Network.mainnet, CoinType.bitcoin);
22 | }
23 |
24 | protected abstract byte[] getSeed();
25 | }
26 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/Bip44Test.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.extern.Hex;
10 | import com.github.orogvany.bip32.wallet.Bip44;
11 | import com.github.orogvany.bip32.wallet.CoinType;
12 | import com.github.orogvany.bip32.wallet.HdAddress;
13 | import org.junit.Test;
14 |
15 | import java.io.UnsupportedEncodingException;
16 |
17 | public class Bip44Test {
18 | private Bip44 bip44 = new Bip44();
19 | private byte[] seed = Hex.decode("abcdef");
20 |
21 | @Test
22 | public void testBitcoin() throws UnsupportedEncodingException {
23 | HdAddress address = bip44.getRootAddressFromSeed(seed, Network.mainnet, CoinType.bitcoin);
24 | bip44.getAddress(address, 0);
25 | }
26 |
27 | @Test
28 | public void testSemux() throws UnsupportedEncodingException {
29 | HdAddress address = bip44.getRootAddressFromSeed(seed, Network.mainnet, CoinType.semux);
30 | bip44.getAddress(address, 0);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/BitUtilTest.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.crypto.BitUtil;
10 | import org.junit.Assert;
11 | import org.junit.Test;
12 |
13 | public class BitUtilTest {
14 |
15 | @Test
16 | public void testCheckBitFromLeft()
17 | {
18 | byte a = 0x01;
19 | //th 8th bit from the left is one
20 | Assert.assertTrue(BitUtil.checkBit(a, 8));
21 |
22 | a = (byte) 0x80;
23 | Assert.assertTrue(BitUtil.checkBit(a, 1));
24 | }
25 |
26 | @Test
27 | public void testSetBit()
28 | {
29 | byte a = 0;
30 | a = BitUtil.setBit(a, 1);
31 | Assert.assertEquals(a, (byte) 0x80);
32 | a = BitUtil.setBit(a,5);
33 | Assert.assertEquals(a, (byte) 0x88);
34 | }
35 |
36 | @Test
37 | public void testUnsetBit()
38 | {
39 | byte a = (byte) 0x88;
40 | a = BitUtil.unsetBit(a, 1);
41 | Assert.assertEquals(a, (byte) 0x08);
42 | a = BitUtil.unsetBit(a,5);
43 | Assert.assertEquals(a, (byte) 0x00);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/PublicKeyChainTest.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.extern.Hex;
10 | import com.github.orogvany.bip32.wallet.CoinType;
11 | import com.github.orogvany.bip32.wallet.HdAddress;
12 | import com.github.orogvany.bip32.wallet.HdKeyGenerator;
13 | import com.github.orogvany.bip32.wallet.key.Curve;
14 | import com.github.orogvany.bip32.wallet.key.HdPublicKey;
15 | import org.junit.Assert;
16 | import org.junit.Test;
17 |
18 | import java.io.UnsupportedEncodingException;
19 |
20 | public class PublicKeyChainTest {
21 |
22 | public static final byte[] SEED = Hex.decode("000102030405060708090a0b0c0d0e0f");
23 |
24 | HdKeyGenerator generator = new HdKeyGenerator();
25 |
26 | @Test
27 | public void testPubKey0() throws UnsupportedEncodingException {
28 | HdAddress rootAddress = generator.getAddressFromSeed(SEED, Network.mainnet, CoinType.bitcoin);
29 | HdAddress address = generator.getAddress(rootAddress, 0, false);
30 | //test that the pub key chain generated from only public key matches the other
31 | HdPublicKey pubKey = generator.getPublicKey(rootAddress.getPublicKey(), 0, false, Curve.bitcoin);
32 | Assert.assertArrayEquals(address.getPublicKey().getKey(), pubKey.getKey());
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/SlipVectorOneTest.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.extern.Hex;
10 | import com.github.orogvany.bip32.wallet.CoinType;
11 | import com.github.orogvany.bip32.wallet.HdAddress;
12 | import com.github.orogvany.bip32.wallet.HdKeyGenerator;
13 | import com.github.orogvany.bip32.wallet.key.Curve;
14 | import org.junit.Assert;
15 | import org.junit.Test;
16 |
17 | import java.io.UnsupportedEncodingException;
18 |
19 | import static org.junit.Assert.fail;
20 |
21 | public class SlipVectorOneTest {
22 |
23 | public static final byte[] SEED = Hex.decode("000102030405060708090a0b0c0d0e0f");
24 | public HdKeyGenerator hdKeyGenerator = new HdKeyGenerator();
25 |
26 | @Test
27 | public void testVectorOneMaster() throws UnsupportedEncodingException {
28 | byte[] fingerprint = Hex.decode("00000000");
29 | byte[] chainCode = Hex.decode("90046a93de5380a72b5e45010748567d5ea02bbf6522f979e05c0d8d8ca9fffb");
30 | byte[] privateKey = Hex.decode("2b4be7f19ee27bbf30c667b642d5f4aa69fd169872f8fc3059c08ebae2eb19e7");
31 | byte[] publicKey = Hex.decode("00a4b2856bfec510abab89753fac1ac0e1112364e7d250545963f135f2a33188ed");
32 |
33 | HdAddress address = hdKeyGenerator.getAddressFromSeed(SEED, Network.mainnet, CoinType.semux);
34 |
35 | Assert.assertArrayEquals(fingerprint, address.getPrivateKey().getFingerprint());
36 | Assert.assertArrayEquals(chainCode, address.getPrivateKey().getChainCode());
37 | Assert.assertArrayEquals(privateKey, address.getPrivateKey().getPrivateKey());
38 | Assert.assertArrayEquals(publicKey, address.getPublicKey().getPublicKey());
39 | Assert.assertEquals(Curve.ed25519, address.getCoinType().getCurve());
40 | }
41 |
42 | @Test
43 | public void testUnableToPublicChain() throws UnsupportedEncodingException {
44 | HdAddress address = hdKeyGenerator.getAddressFromSeed(SEED, Network.mainnet, CoinType.semux);
45 | try {
46 | hdKeyGenerator.getPublicKey(address.getPublicKey(), 0, false, Curve.ed25519);
47 | fail("Should not be able to chain public keys with ed25519");
48 |
49 | } catch (UnsupportedOperationException e) {
50 | // expected
51 | }
52 | }
53 |
54 | @Test
55 | public void testVector0H() throws UnsupportedEncodingException {
56 | byte[] fingerprint = Hex.decode("ddebc675");
57 | byte[] chainCode = Hex.decode("8b59aa11380b624e81507a27fedda59fea6d0b779a778918a2fd3590e16e9c69");
58 | byte[] privateKey = Hex.decode("68e0fe46dfb67e368c75379acec591dad19df3cde26e63b93a8e704f1dade7a3");
59 | byte[] publicKey = Hex.decode("008c8a13df77a28f3445213a0f432fde644acaa215fc72dcdf300d5efaa85d350c");
60 |
61 | HdAddress master = hdKeyGenerator.getAddressFromSeed(SEED, Network.mainnet, CoinType.semux);
62 | HdAddress address = hdKeyGenerator.getAddress(master, 0, true);
63 |
64 | Assert.assertArrayEquals(fingerprint, address.getPrivateKey().getFingerprint());
65 | Assert.assertArrayEquals(chainCode, address.getPrivateKey().getChainCode());
66 | Assert.assertArrayEquals(privateKey, address.getPrivateKey().getPrivateKey());
67 | Assert.assertArrayEquals(publicKey, address.getPublicKey().getPublicKey());
68 | Assert.assertEquals(Curve.ed25519, address.getCoinType().getCurve());
69 | }
70 |
71 | @Test
72 | public void testVector0H1H() throws UnsupportedEncodingException {
73 | byte[] fingerprint = Hex.decode("13dab143");
74 | byte[] chainCode = Hex.decode("a320425f77d1b5c2505a6b1b27382b37368ee640e3557c315416801243552f14");
75 | byte[] privateKey = Hex.decode("b1d0bad404bf35da785a64ca1ac54b2617211d2777696fbffaf208f746ae84f2");
76 | byte[] publicKey = Hex.decode("001932a5270f335bed617d5b935c80aedb1a35bd9fc1e31acafd5372c30f5c1187");
77 |
78 | HdAddress master = hdKeyGenerator.getAddressFromSeed(SEED, Network.mainnet, CoinType.semux);
79 | HdAddress address = hdKeyGenerator.getAddress(master, 0, true);
80 | address = hdKeyGenerator.getAddress(address, 1, true);
81 |
82 | Assert.assertArrayEquals(fingerprint, address.getPrivateKey().getFingerprint());
83 | Assert.assertArrayEquals(chainCode, address.getPrivateKey().getChainCode());
84 | Assert.assertArrayEquals(privateKey, address.getPrivateKey().getPrivateKey());
85 | Assert.assertArrayEquals(publicKey, address.getPublicKey().getPublicKey());
86 | Assert.assertEquals(Curve.ed25519, address.getCoinType().getCurve());
87 | }
88 |
89 | @Test
90 | public void testVector0H1H2H() throws UnsupportedEncodingException {
91 | byte[] fingerprint = Hex.decode("ebe4cb29");
92 | byte[] chainCode = Hex.decode("2e69929e00b5ab250f49c3fb1c12f252de4fed2c1db88387094a0f8c4c9ccd6c");
93 | byte[] privateKey = Hex.decode("92a5b23c0b8a99e37d07df3fb9966917f5d06e02ddbd909c7e184371463e9fc9");
94 | byte[] publicKey = Hex.decode("00ae98736566d30ed0e9d2f4486a64bc95740d89c7db33f52121f8ea8f76ff0fc1");
95 |
96 | HdAddress master = hdKeyGenerator.getAddressFromSeed(SEED, Network.mainnet, CoinType.semux);
97 | HdAddress address = hdKeyGenerator.getAddress(master, 0, true);
98 | address = hdKeyGenerator.getAddress(address, 1, true);
99 | address = hdKeyGenerator.getAddress(address, 2, true);
100 |
101 | Assert.assertArrayEquals(fingerprint, address.getPrivateKey().getFingerprint());
102 | Assert.assertArrayEquals(chainCode, address.getPrivateKey().getChainCode());
103 | Assert.assertArrayEquals(privateKey, address.getPrivateKey().getPrivateKey());
104 | Assert.assertArrayEquals(publicKey, address.getPublicKey().getPublicKey());
105 | Assert.assertEquals(Curve.ed25519, address.getCoinType().getCurve());
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/VectorOneTest.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.extern.Hex;
10 | import com.github.orogvany.bip32.wallet.HdAddress;
11 | import org.junit.Test;
12 |
13 | import java.io.UnsupportedEncodingException;
14 |
15 | import static org.junit.Assert.assertEquals;
16 |
17 | /**
18 | * Test vector from https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki
19 | */
20 | public class VectorOneTest extends BaseVectorTest {
21 |
22 | public static final byte[] SEED = Hex.decode("000102030405060708090a0b0c0d0e0f");
23 |
24 | public VectorOneTest() throws UnsupportedEncodingException {
25 | super();
26 | }
27 |
28 | @Test
29 | public void testMasterNodePrivateKey() {
30 | String expected = "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi";
31 | assertEquals(expected, Base58.encode(masterNode.getPrivateKey().getKey()));
32 | }
33 |
34 | @Test
35 | public void testMasterNodePublicKey() {
36 | String expected = "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8";
37 | assertEquals(expected, Base58.encode(masterNode.getPublicKey().getKey()));
38 | }
39 |
40 | @Test
41 | public void testChain0HPrivateKey() {
42 | //this is hardened
43 | String expected = "xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7";
44 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, true);
45 | assertEquals(expected, Base58.encode(chain.getPrivateKey().getKey()));
46 | }
47 |
48 | @Test
49 | public void testChain0HPublicKey() {
50 | String expected = "xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw";
51 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, true);
52 | assertEquals(expected, Base58.encode(chain.getPublicKey().getKey()));
53 | }
54 |
55 | @Test
56 | public void testChain0H1PrivateKey() {
57 | String expected = "xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs";
58 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, true);
59 | chain = hdKeyGenerator.getAddress(chain,1, false);
60 | assertEquals(expected, Base58.encode(chain.getPrivateKey().getKey()));
61 | }
62 |
63 | @Test
64 | public void testChain0H1PublicKey() {
65 | String expected = "xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ";
66 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, true);
67 | chain = hdKeyGenerator.getAddress(chain,1, false);
68 | assertEquals(expected, Base58.encode(chain.getPublicKey().getKey()));
69 | }
70 |
71 | @Test
72 | public void testChain0H12HPrivateKey() {
73 | String expected = "xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM";
74 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, true);
75 | chain = hdKeyGenerator.getAddress(chain,1, false);
76 | chain = hdKeyGenerator.getAddress(chain,2, true);
77 | assertEquals(expected, Base58.encode(chain.getPrivateKey().getKey()));
78 | }
79 |
80 | @Test
81 | public void testChain0H12HPublicKey() {
82 | String expected = "xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5";
83 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, true);
84 | chain = hdKeyGenerator.getAddress(chain,1, false);
85 | chain = hdKeyGenerator.getAddress(chain,2, true);
86 | assertEquals(expected, Base58.encode(chain.getPublicKey().getKey()));
87 | }
88 |
89 | @Override
90 | protected byte[] getSeed() {
91 | return SEED;
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/VectorThreeTest.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.extern.Hex;
10 | import com.github.orogvany.bip32.wallet.HdAddress;
11 | import org.junit.Test;
12 |
13 | import java.io.UnsupportedEncodingException;
14 |
15 | import static org.junit.Assert.assertEquals;
16 |
17 | public class VectorThreeTest extends BaseVectorTest {
18 | public static final byte[] SEED = Hex.decode("4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45d239319ac14f863b8d5ab5a0d0c64d2e8a1e7d1457df2e5a3c51c73235be");
19 |
20 | public VectorThreeTest() throws UnsupportedEncodingException {
21 | super();
22 | }
23 |
24 | @Test
25 | public void testMasterNodePrivateKey() {
26 | String expected = "xprv9s21ZrQH143K25QhxbucbDDuQ4naNntJRi4KUfWT7xo4EKsHt2QJDu7KXp1A3u7Bi1j8ph3EGsZ9Xvz9dGuVrtHHs7pXeTzjuxBrCmmhgC6";
27 | assertEquals(expected, Base58.encode(masterNode.getPrivateKey().getKey()));
28 | }
29 |
30 | @Test
31 | public void testMasterNodePublicKey() {
32 | String expected = "xpub661MyMwAqRbcEZVB4dScxMAdx6d4nFc9nvyvH3v4gJL378CSRZiYmhRoP7mBy6gSPSCYk6SzXPTf3ND1cZAceL7SfJ1Z3GC8vBgp2epUt13";
33 | assertEquals(expected, Base58.encode(masterNode.getPublicKey().getKey()));
34 | }
35 |
36 | @Test
37 | public void testChain0HPrivateKey() {
38 | String expected = "xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L";
39 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, true);
40 | assertEquals(expected, Base58.encode(chain.getPrivateKey().getKey()));
41 | }
42 |
43 | @Override
44 | protected byte[] getSeed() {
45 | return SEED;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip32/VectorTwoTest.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2018 orogvany
3 | *
4 | * Distributed under the MIT software license, see the accompanying file
5 | * LICENSE or https://opensource.org/licenses/mit-license.php
6 | */
7 | package com.github.orogvany.bip32;
8 |
9 | import com.github.orogvany.bip32.extern.Hex;
10 | import com.github.orogvany.bip32.wallet.HdAddress;
11 | import org.junit.Test;
12 |
13 | import java.io.UnsupportedEncodingException;
14 |
15 | import static org.junit.Assert.assertEquals;
16 |
17 | public class VectorTwoTest extends BaseVectorTest {
18 | public static final byte[] SEED = Hex.decode("fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542");
19 |
20 | public VectorTwoTest() throws UnsupportedEncodingException {
21 | super();
22 | }
23 |
24 | @Test
25 | public void testMasterNodePrivateKey() {
26 | String expected = "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U";
27 | assertEquals(expected, Base58.encode(masterNode.getPrivateKey().getKey()));
28 | }
29 |
30 | @Test
31 | public void testMasterNodePublicKey() {
32 | String expected = "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB";
33 | assertEquals(expected, Base58.encode(masterNode.getPublicKey().getKey()));
34 | }
35 |
36 | @Test
37 | public void testChain0PrivateKey() {
38 | String expected = "xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt";
39 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, false);
40 | assertEquals(expected, Base58.encode(chain.getPrivateKey().getKey()));
41 | }
42 |
43 | @Test
44 | public void testChain0PublicKey() {
45 | String expected = "xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH";
46 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, false);
47 | assertEquals(expected, Base58.encode(chain.getPublicKey().getKey()));
48 | }
49 |
50 | @Test
51 | public void testChain0_2147483647HPrivateKey() {
52 | String expected = "xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9";
53 | HdAddress chain = hdKeyGenerator.getAddress(masterNode, 0, false);
54 | chain = hdKeyGenerator.getAddress(chain, 2147483647, true);
55 | assertEquals(expected, Base58.encode(chain.getPrivateKey().getKey()));
56 | }
57 |
58 | @Override
59 | protected byte[] getSeed() {
60 | return SEED;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip39/MnemonicGeneratorTest.java:
--------------------------------------------------------------------------------
1 | package com.github.orogvany.bip39;
2 |
3 | import org.junit.Assert;
4 | import org.junit.Test;
5 |
6 | import java.io.IOException;
7 |
8 | public class MnemonicGeneratorTest {
9 |
10 | @Test
11 | public void testHappyPath() {
12 |
13 | Dictionary dictionary;
14 | try {
15 | dictionary = new Dictionary(Language.english);
16 | } catch (IOException e) {
17 | throw new IllegalArgumentException("Unknown dictionary");
18 | }
19 |
20 | MnemonicGenerator generator = new MnemonicGenerator();
21 |
22 | String phrase = generator.getWordlist(128, Language.english);
23 |
24 | byte[] seed = generator.getSeedFromWordlist(phrase, "", Language.english);
25 | byte[] seedAgain = generator.getSeedFromWordlist(phrase, "", Language.english);
26 | Assert.assertArrayEquals(seed, seedAgain);
27 |
28 | String[] words = phrase.split(" ");
29 |
30 | int index = dictionary.indexOf(words[0]);
31 |
32 |
33 | try {
34 | words[0] = "asdf";
35 | generator.getSeedFromWordlist(String.join(" ", words), "", Language.english);
36 | Assert.fail("Should not allow unknown word");
37 | } catch (IllegalArgumentException e) {
38 | }
39 |
40 | // try {
41 | // words[0] = dictionary.getWord((index + 1) % 2048);
42 | // generator.getSeedFromWordlist(String.join(" ", words), "", Language.english);
43 | // Assert.fail("Should not allow non-checksum'd words");
44 | // } catch (IllegalArgumentException e) {
45 | //
46 | // }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip39/Vector.java:
--------------------------------------------------------------------------------
1 | package com.github.orogvany.bip39;
2 |
3 | public class Vector {
4 |
5 | private byte[] entropy;
6 | private String mnemonic;
7 | private String seed;
8 | private String hdKey;
9 |
10 | public Vector(byte[] entropy, String mnemonic, String seed, String hdKey) {
11 | this.entropy = entropy;
12 | this.mnemonic = mnemonic;
13 | this.seed = seed;
14 | this.hdKey = hdKey;
15 | }
16 |
17 | public byte[] getEntropy() {
18 | return entropy;
19 | }
20 |
21 | public String getMnemonic() {
22 | return mnemonic;
23 | }
24 |
25 | public String getSeed() {
26 | return seed;
27 | }
28 |
29 | public String getHdKey() {
30 | return hdKey;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip39/VectorReader.java:
--------------------------------------------------------------------------------
1 | package com.github.orogvany.bip39;
2 |
3 | import com.fasterxml.jackson.databind.JsonNode;
4 | import com.fasterxml.jackson.databind.ObjectMapper;
5 | import com.fasterxml.jackson.databind.node.ArrayNode;
6 | import com.github.orogvany.bip32.extern.Hex;
7 |
8 | import java.io.IOException;
9 | import java.io.InputStream;
10 | import java.util.ArrayList;
11 | import java.util.List;
12 |
13 | public class VectorReader {
14 |
15 | public List getVectors() throws IOException {
16 | InputStream file = this.getClass().getClassLoader().getResourceAsStream("vector/vector.json");
17 | ObjectMapper mapper = new ObjectMapper();
18 | JsonNode tree = mapper.readTree(file);
19 |
20 | JsonNode english = tree.get("english");
21 |
22 | List vectors = new ArrayList<>();
23 | for (int i = 0; i < english.size(); i++) {
24 | ArrayNode v = (ArrayNode) english.get(i);
25 | Vector vector = new Vector(Hex.decode(v.get(0).asText()), v.get(1).asText(), v.get(2).asText(), v.get(3).asText());
26 | vectors.add(vector);
27 | }
28 |
29 | return vectors;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/src/test/java/com/github/orogvany/bip39/VectorTest.java:
--------------------------------------------------------------------------------
1 | package com.github.orogvany.bip39;
2 |
3 | import com.github.orogvany.bip32.Base58;
4 | import com.github.orogvany.bip32.Network;
5 | import com.github.orogvany.bip32.extern.Hex;
6 | import com.github.orogvany.bip32.wallet.CoinType;
7 | import com.github.orogvany.bip32.wallet.HdAddress;
8 | import com.github.orogvany.bip32.wallet.HdKeyGenerator;
9 | import org.junit.Assert;
10 | import org.junit.Test;
11 |
12 | import java.io.IOException;
13 | import java.util.List;
14 |
15 | public class VectorTest {
16 |
17 | @Test
18 | public void testVectors() throws IOException {
19 | MnemonicGenerator generator = new MnemonicGenerator();
20 |
21 | VectorReader reader = new VectorReader();
22 | List vectors = reader.getVectors();
23 | HdKeyGenerator keyGenerator = new HdKeyGenerator();
24 |
25 | String password = "TREZOR";
26 | for (Vector vector : vectors) {
27 | String words = generator.getWordlist(vector.getEntropy(), Language.english);
28 | Assert.assertEquals(vector.getMnemonic(), words);
29 | byte[] seed = generator.getSeedFromWordlist(words, password, Language.english);
30 | Assert.assertEquals(vector.getSeed(), Hex.encode(seed));
31 | HdAddress address = keyGenerator.getAddressFromSeed(seed, Network.mainnet, CoinType.bitcoin);
32 | Assert.assertEquals(vector.getHdKey(), Base58.encode(address.getPrivateKey().getKey()));
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/src/test/resources/vector/vector.json:
--------------------------------------------------------------------------------
1 | {
2 | "english": [
3 | [
4 | "00000000000000000000000000000000",
5 | "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about",
6 | "c55257c360c07c72029aebc1b53c05ed0362ada38ead3e3e9efa3708e53495531f09a6987599d18264c1e1c92f2cf141630c7a3c4ab7c81b2f001698e7463b04",
7 | "xprv9s21ZrQH143K3h3fDYiay8mocZ3afhfULfb5GX8kCBdno77K4HiA15Tg23wpbeF1pLfs1c5SPmYHrEpTuuRhxMwvKDwqdKiGJS9XFKzUsAF"
8 | ],
9 | [
10 | "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f",
11 | "legal winner thank year wave sausage worth useful legal winner thank yellow",
12 | "2e8905819b8723fe2c1d161860e5ee1830318dbf49a83bd451cfb8440c28bd6fa457fe1296106559a3c80937a1c1069be3a3a5bd381ee6260e8d9739fce1f607",
13 | "xprv9s21ZrQH143K2gA81bYFHqU68xz1cX2APaSq5tt6MFSLeXnCKV1RVUJt9FWNTbrrryem4ZckN8k4Ls1H6nwdvDTvnV7zEXs2HgPezuVccsq"
14 | ],
15 | [
16 | "80808080808080808080808080808080",
17 | "letter advice cage absurd amount doctor acoustic avoid letter advice cage above",
18 | "d71de856f81a8acc65e6fc851a38d4d7ec216fd0796d0a6827a3ad6ed5511a30fa280f12eb2e47ed2ac03b5c462a0358d18d69fe4f985ec81778c1b370b652a8",
19 | "xprv9s21ZrQH143K2shfP28KM3nr5Ap1SXjz8gc2rAqqMEynmjt6o1qboCDpxckqXavCwdnYds6yBHZGKHv7ef2eTXy461PXUjBFQg6PrwY4Gzq"
20 | ],
21 | [
22 | "ffffffffffffffffffffffffffffffff",
23 | "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong",
24 | "ac27495480225222079d7be181583751e86f571027b0497b5b5d11218e0a8a13332572917f0f8e5a589620c6f15b11c61dee327651a14c34e18231052e48c069",
25 | "xprv9s21ZrQH143K2V4oox4M8Zmhi2Fjx5XK4Lf7GKRvPSgydU3mjZuKGCTg7UPiBUD7ydVPvSLtg9hjp7MQTYsW67rZHAXeccqYqrsx8LcXnyd"
26 | ],
27 | [
28 | "000000000000000000000000000000000000000000000000",
29 | "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent",
30 | "035895f2f481b1b0f01fcf8c289c794660b289981a78f8106447707fdd9666ca06da5a9a565181599b79f53b844d8a71dd9f439c52a3d7b3e8a79c906ac845fa",
31 | "xprv9s21ZrQH143K3mEDrypcZ2usWqFgzKB6jBBx9B6GfC7fu26X6hPRzVjzkqkPvDqp6g5eypdk6cyhGnBngbjeHTe4LsuLG1cCmKJka5SMkmU"
32 | ],
33 | [
34 | "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f",
35 | "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will",
36 | "f2b94508732bcbacbcc020faefecfc89feafa6649a5491b8c952cede496c214a0c7b3c392d168748f2d4a612bada0753b52a1c7ac53c1e93abd5c6320b9e95dd",
37 | "xprv9s21ZrQH143K3Lv9MZLj16np5GzLe7tDKQfVusBni7toqJGcnKRtHSxUwbKUyUWiwpK55g1DUSsw76TF1T93VT4gz4wt5RM23pkaQLnvBh7"
38 | ],
39 | [
40 | "808080808080808080808080808080808080808080808080",
41 | "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always",
42 | "107d7c02a5aa6f38c58083ff74f04c607c2d2c0ecc55501dadd72d025b751bc27fe913ffb796f841c49b1d33b610cf0e91d3aa239027f5e99fe4ce9e5088cd65",
43 | "xprv9s21ZrQH143K3VPCbxbUtpkh9pRG371UCLDz3BjceqP1jz7XZsQ5EnNkYAEkfeZp62cDNj13ZTEVG1TEro9sZ9grfRmcYWLBhCocViKEJae"
44 | ],
45 | [
46 | "ffffffffffffffffffffffffffffffffffffffffffffffff",
47 | "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when",
48 | "0cd6e5d827bb62eb8fc1e262254223817fd068a74b5b449cc2f667c3f1f985a76379b43348d952e2265b4cd129090758b3e3c2c49103b5051aac2eaeb890a528",
49 | "xprv9s21ZrQH143K36Ao5jHRVhFGDbLP6FCx8BEEmpru77ef3bmA928BxsqvVM27WnvvyfWywiFN8K6yToqMaGYfzS6Db1EHAXT5TuyCLBXUfdm"
50 | ],
51 | [
52 | "0000000000000000000000000000000000000000000000000000000000000000",
53 | "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art",
54 | "bda85446c68413707090a52022edd26a1c9462295029f2e60cd7c4f2bbd3097170af7a4d73245cafa9c3cca8d561a7c3de6f5d4a10be8ed2a5e608d68f92fcc8",
55 | "xprv9s21ZrQH143K32qBagUJAMU2LsHg3ka7jqMcV98Y7gVeVyNStwYS3U7yVVoDZ4btbRNf4h6ibWpY22iRmXq35qgLs79f312g2kj5539ebPM"
56 | ],
57 | [
58 | "7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f",
59 | "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title",
60 | "bc09fca1804f7e69da93c2f2028eb238c227f2e9dda30cd63699232578480a4021b146ad717fbb7e451ce9eb835f43620bf5c514db0f8add49f5d121449d3e87",
61 | "xprv9s21ZrQH143K3Y1sd2XVu9wtqxJRvybCfAetjUrMMco6r3v9qZTBeXiBZkS8JxWbcGJZyio8TrZtm6pkbzG8SYt1sxwNLh3Wx7to5pgiVFU"
62 | ],
63 | [
64 | "8080808080808080808080808080808080808080808080808080808080808080",
65 | "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic bless",
66 | "c0c519bd0e91a2ed54357d9d1ebef6f5af218a153624cf4f2da911a0ed8f7a09e2ef61af0aca007096df430022f7a2b6fb91661a9589097069720d015e4e982f",
67 | "xprv9s21ZrQH143K3CSnQNYC3MqAAqHwxeTLhDbhF43A4ss4ciWNmCY9zQGvAKUSqVUf2vPHBTSE1rB2pg4avopqSiLVzXEU8KziNnVPauTqLRo"
68 | ],
69 | [
70 | "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
71 | "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo vote",
72 | "dd48c104698c30cfe2b6142103248622fb7bb0ff692eebb00089b32d22484e1613912f0a5b694407be899ffd31ed3992c456cdf60f5d4564b8ba3f05a69890ad",
73 | "xprv9s21ZrQH143K2WFF16X85T2QCpndrGwx6GueB72Zf3AHwHJaknRXNF37ZmDrtHrrLSHvbuRejXcnYxoZKvRquTPyp2JiNG3XcjQyzSEgqCB"
74 | ],
75 | [
76 | "9e885d952ad362caeb4efe34a8e91bd2",
77 | "ozone drill grab fiber curtain grace pudding thank cruise elder eight picnic",
78 | "274ddc525802f7c828d8ef7ddbcdc5304e87ac3535913611fbbfa986d0c9e5476c91689f9c8a54fd55bd38606aa6a8595ad213d4c9c9f9aca3fb217069a41028",
79 | "xprv9s21ZrQH143K2oZ9stBYpoaZ2ktHj7jLz7iMqpgg1En8kKFTXJHsjxry1JbKH19YrDTicVwKPehFKTbmaxgVEc5TpHdS1aYhB2s9aFJBeJH"
80 | ],
81 | [
82 | "6610b25967cdcca9d59875f5cb50b0ea75433311869e930b",
83 | "gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog",
84 | "628c3827a8823298ee685db84f55caa34b5cc195a778e52d45f59bcf75aba68e4d7590e101dc414bc1bbd5737666fbbef35d1f1903953b66624f910feef245ac",
85 | "xprv9s21ZrQH143K3uT8eQowUjsxrmsA9YUuQQK1RLqFufzybxD6DH6gPY7NjJ5G3EPHjsWDrs9iivSbmvjc9DQJbJGatfa9pv4MZ3wjr8qWPAK"
86 | ],
87 | [
88 | "68a79eaca2324873eacc50cb9c6eca8cc68ea5d936f98787c60c7ebc74e6ce7c",
89 | "hamster diagram private dutch cause delay private meat slide toddler razor book happy fancy gospel tennis maple dilemma loan word shrug inflict delay length",
90 | "64c87cde7e12ecf6704ab95bb1408bef047c22db4cc7491c4271d170a1b213d20b385bc1588d9c7b38f1b39d415665b8a9030c9ec653d75e65f847d8fc1fc440",
91 | "xprv9s21ZrQH143K2XTAhys3pMNcGn261Fi5Ta2Pw8PwaVPhg3D8DWkzWQwjTJfskj8ofb81i9NP2cUNKxwjueJHHMQAnxtivTA75uUFqPFeWzk"
92 | ],
93 | [
94 | "c0ba5a8e914111210f2bd131f3d5e08d",
95 | "scheme spot photo card baby mountain device kick cradle pact join borrow",
96 | "ea725895aaae8d4c1cf682c1bfd2d358d52ed9f0f0591131b559e2724bb234fca05aa9c02c57407e04ee9dc3b454aa63fbff483a8b11de949624b9f1831a9612",
97 | "xprv9s21ZrQH143K3FperxDp8vFsFycKCRcJGAFmcV7umQmcnMZaLtZRt13QJDsoS5F6oYT6BB4sS6zmTmyQAEkJKxJ7yByDNtRe5asP2jFGhT6"
98 | ],
99 | [
100 | "6d9be1ee6ebd27a258115aad99b7317b9c8d28b6d76431c3",
101 | "horn tenant knee talent sponsor spell gate clip pulse soap slush warm silver nephew swap uncle crack brave",
102 | "fd579828af3da1d32544ce4db5c73d53fc8acc4ddb1e3b251a31179cdb71e853c56d2fcb11aed39898ce6c34b10b5382772db8796e52837b54468aeb312cfc3d",
103 | "xprv9s21ZrQH143K3R1SfVZZLtVbXEB9ryVxmVtVMsMwmEyEvgXN6Q84LKkLRmf4ST6QrLeBm3jQsb9gx1uo23TS7vo3vAkZGZz71uuLCcywUkt"
104 | ],
105 | [
106 | "9f6a2878b2520799a44ef18bc7df394e7061a224d2c33cd015b157d746869863",
107 | "panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside",
108 | "72be8e052fc4919d2adf28d5306b5474b0069df35b02303de8c1729c9538dbb6fc2d731d5f832193cd9fb6aeecbc469594a70e3dd50811b5067f3b88b28c3e8d",
109 | "xprv9s21ZrQH143K2WNnKmssvZYM96VAr47iHUQUTUyUXH3sAGNjhJANddnhw3i3y3pBbRAVk5M5qUGFr4rHbEWwXgX4qrvrceifCYQJbbFDems"
110 | ],
111 | [
112 | "23db8160a31d3e0dca3688ed941adbf3",
113 | "cat swing flag economy stadium alone churn speed unique patch report train",
114 | "deb5f45449e615feff5640f2e49f933ff51895de3b4381832b3139941c57b59205a42480c52175b6efcffaa58a2503887c1e8b363a707256bdd2b587b46541f5",
115 | "xprv9s21ZrQH143K4G28omGMogEoYgDQuigBo8AFHAGDaJdqQ99QKMQ5J6fYTMfANTJy6xBmhvsNZ1CJzRZ64PWbnTFUn6CDV2FxoMDLXdk95DQ"
116 | ],
117 | [
118 | "8197a4a47f0425faeaa69deebc05ca29c0a5b5cc76ceacc0",
119 | "light rule cinnamon wrap drastic word pride squirrel upgrade then income fatal apart sustain crack supply proud access",
120 | "4cbdff1ca2db800fd61cae72a57475fdc6bab03e441fd63f96dabd1f183ef5b782925f00105f318309a7e9c3ea6967c7801e46c8a58082674c860a37b93eda02",
121 | "xprv9s21ZrQH143K3wtsvY8L2aZyxkiWULZH4vyQE5XkHTXkmx8gHo6RUEfH3Jyr6NwkJhvano7Xb2o6UqFKWHVo5scE31SGDCAUsgVhiUuUDyh"
122 | ],
123 | [
124 | "066dca1a2bb7e8a1db2832148ce9933eea0f3ac9548d793112d9a95c9407efad",
125 | "all hour make first leader extend hole alien behind guard gospel lava path output census museum junior mass reopen famous sing advance salt reform",
126 | "26e975ec644423f4a4c4f4215ef09b4bd7ef924e85d1d17c4cf3f136c2863cf6df0a475045652c57eb5fb41513ca2a2d67722b77e954b4b3fc11f7590449191d",
127 | "xprv9s21ZrQH143K3rEfqSM4QZRVmiMuSWY9wugscmaCjYja3SbUD3KPEB1a7QXJoajyR2T1SiXU7rFVRXMV9XdYVSZe7JoUXdP4SRHTxsT1nzm"
128 | ],
129 | [
130 | "f30f8c1da665478f49b001d94c5fc452",
131 | "vessel ladder alter error federal sibling chat ability sun glass valve picture",
132 | "2aaa9242daafcee6aa9d7269f17d4efe271e1b9a529178d7dc139cd18747090bf9d60295d0ce74309a78852a9caadf0af48aae1c6253839624076224374bc63f",
133 | "xprv9s21ZrQH143K2QWV9Wn8Vvs6jbqfF1YbTCdURQW9dLFKDovpKaKrqS3SEWsXCu6ZNky9PSAENg6c9AQYHcg4PjopRGGKmdD313ZHszymnps"
134 | ],
135 | [
136 | "c10ec20dc3cd9f652c7fac2f1230f7a3c828389a14392f05",
137 | "scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump",
138 | "7b4a10be9d98e6cba265566db7f136718e1398c71cb581e1b2f464cac1ceedf4f3e274dc270003c670ad8d02c4558b2f8e39edea2775c9e232c7cb798b069e88",
139 | "xprv9s21ZrQH143K4aERa2bq7559eMCCEs2QmmqVjUuzfy5eAeDX4mqZffkYwpzGQRE2YEEeLVRoH4CSHxianrFaVnMN2RYaPUZJhJx8S5j6puX"
140 | ],
141 | [
142 | "f585c11aec520db57dd353c69554b21a89b20fb0650966fa0a9d6f74fd989d8f",
143 | "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold",
144 | "01f5bced59dec48e362f2c45b5de68b9fd6c92c6634f44d6d40aab69056506f0e35524a518034ddc1192e1dacd32c1ed3eaa3c3b131c88ed8e7e54c49a5d0998",
145 | "xprv9s21ZrQH143K39rnQJknpH1WEPFJrzmAqqasiDcVrNuk926oizzJDDQkdiTvNPr2FYDYzWgiMiC63YmfPAa2oPyNB23r2g7d1yiK6WpqaQS"
146 | ]
147 | ]
148 | }
--------------------------------------------------------------------------------