markdown lint using travis

parent 107edf5d
language: node_js
node_js:
- "node"
before_script:
- npm install -g markdownlint-cli
script:
- markdownlint -c markdownlint.json *.md
#SatoshiLabs Improvement Proposals # SatoshiLabs Improvement Proposals
SatoshiLabs projects need a way how to document their technical decisions and features. SatoshiLabs projects need a way how to document their technical decisions and features.
For some of them Bitcoin Improvement Proposal (BIP) is not a right place because For some of them Bitcoin Improvement Proposal (BIP) is not a right place because
......
{
"MD004": false,
"MD013": false,
"MD029": false,
"MD033": false,
"MD040": false
}
#SLIP-0000 : SLIP Template # SLIP-0000 : SLIP Template
``` ```
Number: SLIP-0000 Number: SLIP-0000
...@@ -9,20 +9,20 @@ Authors: SatoshiLabs <info@satoshilabs.com> ...@@ -9,20 +9,20 @@ Authors: SatoshiLabs <info@satoshilabs.com>
Created: 2014-06-06 Created: 2014-06-06
``` ```
##Abstract ## Abstract
This is a section for an abstract. This is a section for an abstract.
##Motivation ## Motivation
This is a section for a motivation. This is a section for a motivation.
##Body ## Body
This is a section for a body. The title of the section should be changed This is a section for a body. The title of the section should be changed
and the section can be split into multiple sections and subsections. and the section can be split into multiple sections and subsections.
##References ## References
This is a section for references such as links to other documents (BIP or SLIP) This is a section for references such as links to other documents (BIP or SLIP)
or to reference implementations. or to reference implementations.
...@@ -96,7 +96,7 @@ The function CKDpriv((k<sub>par</sub>, c<sub>par</sub>), i) &rarr; (k<sub>i</sub ...@@ -96,7 +96,7 @@ The function CKDpriv((k<sub>par</sub>, c<sub>par</sub>), i) &rarr; (k<sub>i</sub
* let I = HMAC-SHA512(Key = c<sub>par</sub>, Data = 0x01 || I<sub>R</sub> || ser<sub>32</sub>(i) and restart at step 2. * let I = HMAC-SHA512(Key = c<sub>par</sub>, Data = 0x01 || I<sub>R</sub> || ser<sub>32</sub>(i) and restart at step 2.
6. Otherwise: The returned child key k<sub>i</sub> is parse<sub>256</sub>(I<sub>L</sub>) + k<sub>par</sub> (mod n). 6. Otherwise: The returned child key k<sub>i</sub> is parse<sub>256</sub>(I<sub>L</sub>) + k<sub>par</sub> (mod n).
The HMAC-SHA512 function is specified in [http://tools.ietf.org/html/rfc4231 RFC 4231]. The HMAC-SHA512 function is specified in [RFC 4231](http://tools.ietf.org/html/rfc4231).
#### Public parent key &rarr; public child key #### Public parent key &rarr; public child key
...@@ -116,234 +116,250 @@ The function CKDpub((K<sub>par</sub>, c<sub>par</sub>), i) &rarr; (K<sub>i</sub> ...@@ -116,234 +116,250 @@ The function CKDpub((K<sub>par</sub>, c<sub>par</sub>), i) &rarr; (K<sub>i</sub>
## Test vectors ## Test vectors
### Test vector 1 for secp256k1 ### Test vector 1 for secp256k1
Seed (hex): 000102030405060708090a0b0c0d0e0f Seed (hex): 000102030405060708090a0b0c0d0e0f
* Chain m * Chain m
* fpr: 00000000 * fpr: 00000000
* chain: 873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508 * chain: 873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508
* prv: e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35 * prv: e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35
* pub: 0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2 * pub: 0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2
* Chain m/0<sub>H</sub> * Chain m/0<sub>H</sub>
* fpr: 3442193e * fpr: 3442193e
* chain: 47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141 * chain: 47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141
* prv: edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea * prv: edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea
* pub: 035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56 * pub: 035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56
* Chain m/0<sub>H</sub>/1 * Chain m/0<sub>H</sub>/1
* fpr: 5c1bd648 * fpr: 5c1bd648
* chain: 2a7857631386ba23dacac34180dd1983734e444fdbf774041578e9b6adb37c19 * chain: 2a7857631386ba23dacac34180dd1983734e444fdbf774041578e9b6adb37c19
* prv: 3c6cb8d0f6a264c91ea8b5030fadaa8e538b020f0a387421a12de9319dc93368 * prv: 3c6cb8d0f6a264c91ea8b5030fadaa8e538b020f0a387421a12de9319dc93368
* pub: 03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c * pub: 03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c
* Chain m/0<sub>H</sub>/1/2<sub>H</sub> * Chain m/0<sub>H</sub>/1/2<sub>H</sub>
* fpr: bef5a2f9 * fpr: bef5a2f9
* chain: 04466b9cc8e161e966409ca52986c584f07e9dc81f735db683c3ff6ec7b1503f * chain: 04466b9cc8e161e966409ca52986c584f07e9dc81f735db683c3ff6ec7b1503f
* prv: cbce0d719ecf7431d88e6a89fa1483e02e35092af60c042b1df2ff59fa424dca * prv: cbce0d719ecf7431d88e6a89fa1483e02e35092af60c042b1df2ff59fa424dca
* pub: 0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2 * pub: 0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2
* Chain m/0<sub>H</sub>/1/2<sub>H</sub>/2 * Chain m/0<sub>H</sub>/1/2<sub>H</sub>/2
* fpr: ee7ab90c * fpr: ee7ab90c
* chain: cfb71883f01676f587d023cc53a35bc7f88f724b1f8c2892ac1275ac822a3edd * chain: cfb71883f01676f587d023cc53a35bc7f88f724b1f8c2892ac1275ac822a3edd
* prv: 0f479245fb19a38a1954c5c7c0ebab2f9bdfd96a17563ef28a6a4b1a2a764ef4 * prv: 0f479245fb19a38a1954c5c7c0ebab2f9bdfd96a17563ef28a6a4b1a2a764ef4
* pub: 02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29 * pub: 02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29
* Chain m/0<sub>H</sub>/1/2<sub>H</sub>/2/1000000000 * Chain m/0<sub>H</sub>/1/2<sub>H</sub>/2/1000000000
* fpr: d880d7d8 * fpr: d880d7d8
* chain: c783e67b921d2beb8f6b389cc646d7263b4145701dadd2161548a8b078e65e9e * chain: c783e67b921d2beb8f6b389cc646d7263b4145701dadd2161548a8b078e65e9e
* prv: 471b76e389e528d6de6d816857e012c5455051cad6660850e58372a6c3e6e7c8 * prv: 471b76e389e528d6de6d816857e012c5455051cad6660850e58372a6c3e6e7c8
* pub: 022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011 * pub: 022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011
### Test vector 1 for nist256p1 ### Test vector 1 for nist256p1
Seed (hex): 000102030405060708090a0b0c0d0e0f Seed (hex): 000102030405060708090a0b0c0d0e0f
* Chain m * Chain m
* fpr: 00000000 * fpr: 00000000
* chain: beeb672fe4621673f722f38529c07392fecaa61015c80c34f29ce8b41b3cb6ea * chain: beeb672fe4621673f722f38529c07392fecaa61015c80c34f29ce8b41b3cb6ea
* prv: 612091aaa12e22dd2abef664f8a01a82cae99ad7441b7ef8110424915c268bc2 * prv: 612091aaa12e22dd2abef664f8a01a82cae99ad7441b7ef8110424915c268bc2
* pub: 0266874dc6ade47b3ecd096745ca09bcd29638dd52c2c12117b11ed3e458cfa9e8 * pub: 0266874dc6ade47b3ecd096745ca09bcd29638dd52c2c12117b11ed3e458cfa9e8
* Chain m/0<sub>H</sub> * Chain m/0<sub>H</sub>
* fpr: be6105b5 * fpr: be6105b5
* chain: 3460cea53e6a6bb5fb391eeef3237ffd8724bf0a40e94943c98b83825342ee11 * chain: 3460cea53e6a6bb5fb391eeef3237ffd8724bf0a40e94943c98b83825342ee11
* prv: 6939694369114c67917a182c59ddb8cafc3004e63ca5d3b84403ba8613debc0c * prv: 6939694369114c67917a182c59ddb8cafc3004e63ca5d3b84403ba8613debc0c
* pub: 0384610f5ecffe8fda089363a41f56a5c7ffc1d81b59a612d0d649b2d22355590c * pub: 0384610f5ecffe8fda089363a41f56a5c7ffc1d81b59a612d0d649b2d22355590c
* Chain m/0<sub>H</sub>/1 * Chain m/0<sub>H</sub>/1
* fpr: 9b02312f * fpr: 9b02312f
* chain: 4187afff1aafa8445010097fb99d23aee9f599450c7bd140b6826ac22ba21d0c * chain: 4187afff1aafa8445010097fb99d23aee9f599450c7bd140b6826ac22ba21d0c
* prv: 284e9d38d07d21e4e281b645089a94f4cf5a5a81369acf151a1c3a57f18b2129 * prv: 284e9d38d07d21e4e281b645089a94f4cf5a5a81369acf151a1c3a57f18b2129
* pub: 03526c63f8d0b4bbbf9c80df553fe66742df4676b241dabefdef67733e070f6844 * pub: 03526c63f8d0b4bbbf9c80df553fe66742df4676b241dabefdef67733e070f6844
* Chain m/0<sub>H</sub>/1/2<sub>H</sub> * Chain m/0<sub>H</sub>/1/2<sub>H</sub>
* fpr: b98005c1 * fpr: b98005c1
* chain: 98c7514f562e64e74170cc3cf304ee1ce54d6b6da4f880f313e8204c2a185318 * chain: 98c7514f562e64e74170cc3cf304ee1ce54d6b6da4f880f313e8204c2a185318
* prv: 694596e8a54f252c960eb771a3c41e7e32496d03b954aeb90f61635b8e092aa7 * prv: 694596e8a54f252c960eb771a3c41e7e32496d03b954aeb90f61635b8e092aa7
* pub: 0359cf160040778a4b14c5f4d7b76e327ccc8c4a6086dd9451b7482b5a4972dda0 * pub: 0359cf160040778a4b14c5f4d7b76e327ccc8c4a6086dd9451b7482b5a4972dda0
* Chain m/0<sub>H</sub>/1/2<sub>H</sub>/2 * Chain m/0<sub>H</sub>/1/2<sub>H</sub>/2
* fpr: 0e9f3274 * fpr: 0e9f3274
* chain: ba96f776a5c3907d7fd48bde5620ee374d4acfd540378476019eab70790c63a0 * chain: ba96f776a5c3907d7fd48bde5620ee374d4acfd540378476019eab70790c63a0
* prv: 5996c37fd3dd2679039b23ed6f70b506c6b56b3cb5e424681fb0fa64caf82aaa * prv: 5996c37fd3dd2679039b23ed6f70b506c6b56b3cb5e424681fb0fa64caf82aaa
* pub: 029f871f4cb9e1c97f9f4de9ccd0d4a2f2a171110c61178f84430062230833ff20 * pub: 029f871f4cb9e1c97f9f4de9ccd0d4a2f2a171110c61178f84430062230833ff20
* Chain m/0<sub>H</sub>/1/2<sub>H</sub>/2/1000000000 * Chain m/0<sub>H</sub>/1/2<sub>H</sub>/2/1000000000
* fpr: 8b2b5c4b * fpr: 8b2b5c4b
* chain: b9b7b82d326bb9cb5b5b121066feea4eb93d5241103c9e7a18aad40f1dde8059 * chain: b9b7b82d326bb9cb5b5b121066feea4eb93d5241103c9e7a18aad40f1dde8059
* prv: 21c4f269ef0a5fd1badf47eeacebeeaa3de22eb8e5b0adcd0f27dd99d34d0119 * prv: 21c4f269ef0a5fd1badf47eeacebeeaa3de22eb8e5b0adcd0f27dd99d34d0119
* pub: 02216cd26d31147f72427a453c443ed2cde8a1e53c9cc44e5ddf739725413fe3f4 * pub: 02216cd26d31147f72427a453c443ed2cde8a1e53c9cc44e5ddf739725413fe3f4
### Test vector 1 for ed25519 ### Test vector 1 for ed25519
Seed (hex): 000102030405060708090a0b0c0d0e0f Seed (hex): 000102030405060708090a0b0c0d0e0f
* Chain m * Chain m
* fpr: 00000000 * fpr: 00000000
* chain: 90046a93de5380a72b5e45010748567d5ea02bbf6522f979e05c0d8d8ca9fffb * chain: 90046a93de5380a72b5e45010748567d5ea02bbf6522f979e05c0d8d8ca9fffb
* prv: 2b4be7f19ee27bbf30c667b642d5f4aa69fd169872f8fc3059c08ebae2eb19e7 * prv: 2b4be7f19ee27bbf30c667b642d5f4aa69fd169872f8fc3059c08ebae2eb19e7
* pub: 00a4b2856bfec510abab89753fac1ac0e1112364e7d250545963f135f2a33188ed * pub: 00a4b2856bfec510abab89753fac1ac0e1112364e7d250545963f135f2a33188ed
* Chain m/0<sub>H</sub> * Chain m/0<sub>H</sub>
* fpr: ddebc675 * fpr: ddebc675
* chain: 8b59aa11380b624e81507a27fedda59fea6d0b779a778918a2fd3590e16e9c69 * chain: 8b59aa11380b624e81507a27fedda59fea6d0b779a778918a2fd3590e16e9c69
* prv: 68e0fe46dfb67e368c75379acec591dad19df3cde26e63b93a8e704f1dade7a3 * prv: 68e0fe46dfb67e368c75379acec591dad19df3cde26e63b93a8e704f1dade7a3
* pub: 008c8a13df77a28f3445213a0f432fde644acaa215fc72dcdf300d5efaa85d350c * pub: 008c8a13df77a28f3445213a0f432fde644acaa215fc72dcdf300d5efaa85d350c
* Chain m/0<sub>H</sub>/1<sub>H</sub> * Chain m/0<sub>H</sub>/1<sub>H</sub>
* fpr: 13dab143 * fpr: 13dab143
* chain: a320425f77d1b5c2505a6b1b27382b37368ee640e3557c315416801243552f14 * chain: a320425f77d1b5c2505a6b1b27382b37368ee640e3557c315416801243552f14
* prv: b1d0bad404bf35da785a64ca1ac54b2617211d2777696fbffaf208f746ae84f2 * prv: b1d0bad404bf35da785a64ca1ac54b2617211d2777696fbffaf208f746ae84f2
* pub: 001932a5270f335bed617d5b935c80aedb1a35bd9fc1e31acafd5372c30f5c1187 * pub: 001932a5270f335bed617d5b935c80aedb1a35bd9fc1e31acafd5372c30f5c1187
* Chain m/0<sub>H</sub>/1<sub>H</sub>/2<sub>H</sub> * Chain m/0<sub>H</sub>/1<sub>H</sub>/2<sub>H</sub>
* fpr: ebe4cb29 * fpr: ebe4cb29
* chain: 2e69929e00b5ab250f49c3fb1c12f252de4fed2c1db88387094a0f8c4c9ccd6c * chain: 2e69929e00b5ab250f49c3fb1c12f252de4fed2c1db88387094a0f8c4c9ccd6c
* prv: 92a5b23c0b8a99e37d07df3fb9966917f5d06e02ddbd909c7e184371463e9fc9 * prv: 92a5b23c0b8a99e37d07df3fb9966917f5d06e02ddbd909c7e184371463e9fc9
* pub: 00ae98736566d30ed0e9d2f4486a64bc95740d89c7db33f52121f8ea8f76ff0fc1 * pub: 00ae98736566d30ed0e9d2f4486a64bc95740d89c7db33f52121f8ea8f76ff0fc1
* Chain m/0<sub>H</sub>/1<sub>H</sub>/2<sub>H</sub>/2<sub>H</sub> * Chain m/0<sub>H</sub>/1<sub>H</sub>/2<sub>H</sub>/2<sub>H</sub>
* fpr: 316ec1c6 * fpr: 316ec1c6
* chain: 8f6d87f93d750e0efccda017d662a1b31a266e4a6f5993b15f5c1f07f74dd5cc * chain: 8f6d87f93d750e0efccda017d662a1b31a266e4a6f5993b15f5c1f07f74dd5cc
* prv: 30d1dc7e5fc04c31219ab25a27ae00b50f6fd66622f6e9c913253d6511d1e662 * prv: 30d1dc7e5fc04c31219ab25a27ae00b50f6fd66622f6e9c913253d6511d1e662
* pub: 008abae2d66361c879b900d204ad2cc4984fa2aa344dd7ddc46007329ac76c429c * pub: 008abae2d66361c879b900d204ad2cc4984fa2aa344dd7ddc46007329ac76c429c
* Chain m/0<sub>H</sub>/1<sub>H</sub>/2<sub>H</sub>/2<sub>H</sub>/1000000000<sub>H</sub> * Chain m/0<sub>H</sub>/1<sub>H</sub>/2<sub>H</sub>/2<sub>H</sub>/1000000000<sub>H</sub>
* fpr: d6322ccd * fpr: d6322ccd
* chain: 68789923a0cac2cd5a29172a475fe9e0fb14cd6adb5ad98a3fa70333e7afa230 * chain: 68789923a0cac2cd5a29172a475fe9e0fb14cd6adb5ad98a3fa70333e7afa230
* prv: 8f94d394a8e8fd6b1bc2f3f49f5c47e385281d5c17e65324b0f62483e37e8793 * prv: 8f94d394a8e8fd6b1bc2f3f49f5c47e385281d5c17e65324b0f62483e37e8793
* pub: 003c24da049451555d51a7014a37337aa4e12d41e485abccfa46b47dfb2af54b7a * pub: 003c24da049451555d51a7014a37337aa4e12d41e485abccfa46b47dfb2af54b7a
### Test vector 2 for secp256k1 ### Test vector 2 for secp256k1
Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542 Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542
* Chain m * Chain m
* fpr: 00000000 * fpr: 00000000
* chain: 60499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd9689 * chain: 60499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd9689
* prv: 4b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e * prv: 4b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e
* pub: 03cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7 * pub: 03cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7
* Chain m/0 * Chain m/0
* fpr: bd16bee5 * fpr: bd16bee5
* chain: f0909affaa7ee7abe5dd4e100598d4dc53cd709d5a5c2cac40e7412f232f7c9c * chain: f0909affaa7ee7abe5dd4e100598d4dc53cd709d5a5c2cac40e7412f232f7c9c
* prv: abe74a98f6c7eabee0428f53798f0ab8aa1bd37873999041703c742f15ac7e1e * prv: abe74a98f6c7eabee0428f53798f0ab8aa1bd37873999041703c742f15ac7e1e
* pub: 02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea * pub: 02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea
* Chain m/0/2147483647<sub>H</sub> * Chain m/0/2147483647<sub>H</sub>
* fpr: 5a61ff8e * fpr: 5a61ff8e
* chain: be17a268474a6bb9c61e1d720cf6215e2a88c5406c4aee7b38547f585c9a37d9 * chain: be17a268474a6bb9c61e1d720cf6215e2a88c5406c4aee7b38547f585c9a37d9
* prv: 877c779ad9687164e9c2f4f0f4ff0340814392330693ce95a58fe18fd52e6e93 * prv: 877c779ad9687164e9c2f4f0f4ff0340814392330693ce95a58fe18fd52e6e93
* pub: 03c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b * pub: 03c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b
* Chain m/0/2147483647<sub>H</sub>/1 * Chain m/0/2147483647<sub>H</sub>/1
* fpr: d8ab4937 * fpr: d8ab4937
* chain: f366f48f1ea9f2d1d3fe958c95ca84ea18e4c4ddb9366c336c927eb246fb38cb * chain: f366f48f1ea9f2d1d3fe958c95ca84ea18e4c4ddb9366c336c927eb246fb38cb
* prv: 704addf544a06e5ee4bea37098463c23613da32020d604506da8c0518e1da4b7 * prv: 704addf544a06e5ee4bea37098463c23613da32020d604506da8c0518e1da4b7
* pub: 03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9 * pub: 03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9
* Chain m/0/2147483647<sub>H</sub>/1/2147483646<sub>H</sub> * Chain m/0/2147483647<sub>H</sub>/1/2147483646<sub>H</sub>
* fpr: 78412e3a * fpr: 78412e3a
* chain: 637807030d55d01f9a0cb3a7839515d796bd07706386a6eddf06cc29a65a0e29 * chain: 637807030d55d01f9a0cb3a7839515d796bd07706386a6eddf06cc29a65a0e29
* prv: f1c7c871a54a804afe328b4c83a1c33b8e5ff48f5087273f04efa83b247d6a2d * prv: f1c7c871a54a804afe328b4c83a1c33b8e5ff48f5087273f04efa83b247d6a2d
* pub: 02d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0 * pub: 02d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0
* Chain m/0/2147483647<sub>H</sub>/1/2147483646<sub>H</sub>/2 * Chain m/0/2147483647<sub>H</sub>/1/2147483646<sub>H</sub>/2
* fpr: 31a507b8 * fpr: 31a507b8
* chain: 9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271 * chain: 9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271
* prv: bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23 * prv: bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23
* pub: 024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c * pub: 024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c
### Test vector 2 for nist256p1 ### Test vector 2 for nist256p1
Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542 Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542
* Chain m * Chain m
* fpr: 00000000 * fpr: 00000000
* chain: 96cd4465a9644e31528eda3592aa35eb39a9527769ce1855beafc1b81055e75d * chain: 96cd4465a9644e31528eda3592aa35eb39a9527769ce1855beafc1b81055e75d
* prv: eaa31c2e46ca2962227cf21d73a7ef0ce8b31c756897521eb6c7b39796633357 * prv: eaa31c2e46ca2962227cf21d73a7ef0ce8b31c756897521eb6c7b39796633357
* pub: 02c9e16154474b3ed5b38218bb0463e008f89ee03e62d22fdcc8014beab25b48fa * pub: 02c9e16154474b3ed5b38218bb0463e008f89ee03e62d22fdcc8014beab25b48fa
* Chain m/0 * Chain m/0
* fpr: 607f628f * fpr: 607f628f
* chain: 84e9c258bb8557a40e0d041115b376dd55eda99c0042ce29e81ebe4efed9b86a * chain: 84e9c258bb8557a40e0d041115b376dd55eda99c0042ce29e81ebe4efed9b86a
* prv: d7d065f63a62624888500cdb4f88b6d59c2927fee9e6d0cdff9cad555884df6e * prv: d7d065f63a62624888500cdb4f88b6d59c2927fee9e6d0cdff9cad555884df6e
* pub: 039b6df4bece7b6c81e2adfeea4bcf5c8c8a6e40ea7ffa3cf6e8494c61a1fc82cc * pub: 039b6df4bece7b6c81e2adfeea4bcf5c8c8a6e40ea7ffa3cf6e8494c61a1fc82cc
* Chain m/0/2147483647<sub>H</sub> * Chain m/0/2147483647<sub>H</sub>
* fpr: 946d2a54 * fpr: 946d2a54
* chain: f235b2bc5c04606ca9c30027a84f353acf4e4683edbd11f635d0dcc1cd106ea6 * chain: f235b2bc5c04606ca9c30027a84f353acf4e4683edbd11f635d0dcc1cd106ea6
* prv: 96d2ec9316746a75e7793684ed01e3d51194d81a42a3276858a5b7376d4b94b9 * prv: 96d2ec9316746a75e7793684ed01e3d51194d81a42a3276858a5b7376d4b94b9
* pub: 02f89c5deb1cae4fedc9905f98ae6cbf6cbab120d8cb85d5bd9a91a72f4c068c76 * pub: 02f89c5deb1cae4fedc9905f98ae6cbf6cbab120d8cb85d5bd9a91a72f4c068c76
* Chain m/0/2147483647<sub>H</sub>/1 * Chain m/0/2147483647<sub>H</sub>/1
* fpr: 218182d8 * fpr: 218182d8
* chain: 7c0b833106235e452eba79d2bdd58d4086e663bc8cc55e9773d2b5eeda313f3b * chain: 7c0b833106235e452eba79d2bdd58d4086e663bc8cc55e9773d2b5eeda313f3b
* prv: 974f9096ea6873a915910e82b29d7c338542ccde39d2064d1cc228f371542bbc * prv: 974f9096ea6873a915910e82b29d7c338542ccde39d2064d1cc228f371542bbc
* pub: 03abe0ad54c97c1d654c1852dfdc32d6d3e487e75fa16f0fd6304b9ceae4220c64 * pub: 03abe0ad54c97c1d654c1852dfdc32d6d3e487e75fa16f0fd6304b9ceae4220c64
* Chain m/0/2147483647<sub>H</sub>/1/2147483646<sub>H</sub> * Chain m/0/2147483647<sub>H</sub>/1/2147483646<sub>H</sub>
* fpr: 931223e4 * fpr: 931223e4
* chain: 5794e616eadaf33413aa309318a26ee0fd5163b70466de7a4512fd4b1a5c9e6a * chain: 5794e616eadaf33413aa309318a26ee0fd5163b70466de7a4512fd4b1a5c9e6a
* prv: da29649bbfaff095cd43819eda9a7be74236539a29094cd8336b07ed8d4eff63 * prv: da29649bbfaff095cd43819eda9a7be74236539a29094cd8336b07ed8d4eff63
* pub: 03cb8cb067d248691808cd6b5a5a06b48e34ebac4d965cba33e6dc46fe13d9b933 * pub: 03cb8cb067d248691808cd6b5a5a06b48e34ebac4d965cba33e6dc46fe13d9b933
* Chain m/0/2147483647<sub>H</sub>/1/2147483646<sub>H</sub>/2 * Chain m/0/2147483647<sub>H</sub>/1/2147483646<sub>H</sub>/2
* fpr: 956c4629 * fpr: 956c4629
* chain: 3bfb29ee8ac4484f09db09c2079b520ea5616df7820f071a20320366fbe226a7 * chain: 3bfb29ee8ac4484f09db09c2079b520ea5616df7820f071a20320366fbe226a7
* prv: bb0a77ba01cc31d77205d51d08bd313b979a71ef4de9b062f8958297e746bd67 * prv: bb0a77ba01cc31d77205d51d08bd313b979a71ef4de9b062f8958297e746bd67
* pub: 020ee02e18967237cf62672983b253ee62fa4dd431f8243bfeccdf39dbe181387f * pub: 020ee02e18967237cf62672983b253ee62fa4dd431f8243bfeccdf39dbe181387f
### Test vector 2 for ed25519 ### Test vector 2 for ed25519
Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542 Seed (hex): fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542
* Chain m * Chain m
* fpr: 00000000 * fpr: 00000000
* chain: ef70a74db9c3a5af931b5fe73ed8e1a53464133654fd55e7a66f8570b8e33c3b * chain: ef70a74db9c3a5af931b5fe73ed8e1a53464133654fd55e7a66f8570b8e33c3b
* prv: 171cb88b1b3c1db25add599712e36245d75bc65a1a5c9e18d76f9f2b1eab4012 * prv: 171cb88b1b3c1db25add599712e36245d75bc65a1a5c9e18d76f9f2b1eab4012
* pub: 008fe9693f8fa62a4305a140b9764c5ee01e455963744fe18204b4fb948249308a * pub: 008fe9693f8fa62a4305a140b9764c5ee01e455963744fe18204b4fb948249308a
* Chain m/0<sub>H</sub> * Chain m/0<sub>H</sub>
* fpr: 31981b50 * fpr: 31981b50
* chain: 0b78a3226f915c082bf118f83618a618ab6dec793752624cbeb622acb562862d * chain: 0b78a3226f915c082bf118f83618a618ab6dec793752624cbeb622acb562862d
* prv: 1559eb2bbec5790b0c65d8693e4d0875b1747f4970ae8b650486ed7470845635 * prv: 1559eb2bbec5790b0c65d8693e4d0875b1747f4970ae8b650486ed7470845635
* pub: 0086fab68dcb57aa196c77c5f264f215a112c22a912c10d123b0d03c3c28ef1037 * pub: 0086fab68dcb57aa196c77c5f264f215a112c22a912c10d123b0d03c3c28ef1037
* Chain m/0<sub>H</sub>/2147483647<sub>H</sub> * Chain m/0<sub>H</sub>/2147483647<sub>H</sub>
* fpr: 1e9411b1 * fpr: 1e9411b1
* chain: 138f0b2551bcafeca6ff2aa88ba8ed0ed8de070841f0c4ef0165df8181eaad7f * chain: 138f0b2551bcafeca6ff2aa88ba8ed0ed8de070841f0c4ef0165df8181eaad7f
* prv: ea4f5bfe8694d8bb74b7b59404632fd5968b774ed545e810de9c32a4fb4192f4 * prv: ea4f5bfe8694d8bb74b7b59404632fd5968b774ed545e810de9c32a4fb4192f4
* pub: 005ba3b9ac6e90e83effcd25ac4e58a1365a9e35a3d3ae5eb07b9e4d90bcf7506d * pub: 005ba3b9ac6e90e83effcd25ac4e58a1365a9e35a3d3ae5eb07b9e4d90bcf7506d
* Chain m/0<sub>H</sub>/2147483647<sub>H</sub>/1<sub>H</sub> * Chain m/0<sub>H</sub>/2147483647<sub>H</sub>/1<sub>H</sub>
* fpr: fcadf38c * fpr: fcadf38c
* chain: 73bd9fff1cfbde33a1b846c27085f711c0fe2d66fd32e139d3ebc28e5a4a6b90 * chain: 73bd9fff1cfbde33a1b846c27085f711c0fe2d66fd32e139d3ebc28e5a4a6b90
* prv: 3757c7577170179c7868353ada796c839135b3d30554bbb74a4b1e4a5a58505c * prv: 3757c7577170179c7868353ada796c839135b3d30554bbb74a4b1e4a5a58505c
* pub: 002e66aa57069c86cc18249aecf5cb5a9cebbfd6fadeab056254763874a9352b45 * pub: 002e66aa57069c86cc18249aecf5cb5a9cebbfd6fadeab056254763874a9352b45
* Chain m/0<sub>H</sub>/2147483647<sub>H</sub>/1<sub>H</sub>/2147483646<sub>H</sub> * Chain m/0<sub>H</sub>/2147483647<sub>H</sub>/1<sub>H</sub>/2147483646<sub>H</sub>
* fpr: aca70953 * fpr: aca70953
* chain: 0902fe8a29f9140480a00ef244bd183e8a13288e4412d8389d140aac1794825a * chain: 0902fe8a29f9140480a00ef244bd183e8a13288e4412d8389d140aac1794825a
* prv: 5837736c89570de861ebc173b1086da4f505d4adb387c6a1b1342d5e4ac9ec72 * prv: 5837736c89570de861ebc173b1086da4f505d4adb387c6a1b1342d5e4ac9ec72
* pub: 00e33c0f7d81d843c572275f287498e8d408654fdf0d1e065b84e2e6f157aab09b * pub: 00e33c0f7d81d843c572275f287498e8d408654fdf0d1e065b84e2e6f157aab09b
* Chain m/0<sub>H</sub>/2147483647<sub>H</sub>/1<sub>H</sub>/2147483646<sub>H</sub>/2<sub>H</sub> * Chain m/0<sub>H</sub>/2147483647<sub>H</sub>/1<sub>H</sub>/2147483646<sub>H</sub>/2<sub>H</sub>
* fpr: 422c654b * fpr: 422c654b
* chain: 5d70af781f3a37b829f0d060924d5e960bdc02e85423494afc0b1a41bbe196d4 * chain: 5d70af781f3a37b829f0d060924d5e960bdc02e85423494afc0b1a41bbe196d4
* prv: 551d333177df541ad876a60ea71f00447931c0a9da16f227c11ea080d7391b8d * prv: 551d333177df541ad876a60ea71f00447931c0a9da16f227c11ea080d7391b8d
* pub: 0047150c75db263559a70d5778bf36abbab30fb061ad69f69ece61a72b0cfa4fc0 * pub: 0047150c75db263559a70d5778bf36abbab30fb061ad69f69ece61a72b0cfa4fc0
### Test derivation retry for nist256p1 ### Test derivation retry for nist256p1
Seed (hex): 000102030405060708090a0b0c0d0e0f Seed (hex): 000102030405060708090a0b0c0d0e0f
* Chain m * Chain m
* fpr: 00000000 * fpr: 00000000
* chain: beeb672fe4621673f722f38529c07392fecaa61015c80c34f29ce8b41b3cb6ea * chain: beeb672fe4621673f722f38529c07392fecaa61015c80c34f29ce8b41b3cb6ea
* prv: 612091aaa12e22dd2abef664f8a01a82cae99ad7441b7ef8110424915c268bc2 * prv: 612091aaa12e22dd2abef664f8a01a82cae99ad7441b7ef8110424915c268bc2
* pub: 0266874dc6ade47b3ecd096745ca09bcd29638dd52c2c12117b11ed3e458cfa9e8 * pub: 0266874dc6ade47b3ecd096745ca09bcd29638dd52c2c12117b11ed3e458cfa9e8
* Chain m/28578<sub>H</sub> * Chain m/28578<sub>H</sub>
* fpr: be6105b5 * fpr: be6105b5
* chain: e94c8ebe30c2250a14713212f6449b20f3329105ea15b652ca5bdfc68f6c65c2 * chain: e94c8ebe30c2250a14713212f6449b20f3329105ea15b652ca5bdfc68f6c65c2
* prv: 06f0db126f023755d0b8d86d4591718a5210dd8d024e3e14b6159d63f53aa669 * prv: 06f0db126f023755d0b8d86d4591718a5210dd8d024e3e14b6159d63f53aa669
* pub: 02519b5554a4872e8c9c1c847115363051ec43e93400e030ba3c36b52a3e70a5b7 * pub: 02519b5554a4872e8c9c1c847115363051ec43e93400e030ba3c36b52a3e70a5b7
* Chain m/28578<sub>H</sub>/33941 * Chain m/28578<sub>H</sub>/33941
* fpr: 3e2b7bc6 * fpr: 3e2b7bc6
* chain: 9e87fe95031f14736774cd82f25fd885065cb7c358c1edf813c72af535e83071 * chain: 9e87fe95031f14736774cd82f25fd885065cb7c358c1edf813c72af535e83071
* prv: 092154eed4af83e078ff9b84322015aefe5769e31270f62c3f66c33888335f3a * prv: 092154eed4af83e078ff9b84322015aefe5769e31270f62c3f66c33888335f3a
* pub: 0235bfee614c0d5b2cae260000bb1d0d84b270099ad790022c1ae0b2e782efe120 * pub: 0235bfee614c0d5b2cae260000bb1d0d84b270099ad790022c1ae0b2e782efe120
### Test seed retry for nist256p1 ### Test seed retry for nist256p1
Seed (hex): a7305bc8df8d0951f0cb224c0e95d7707cbdf2c6ce7e8d481fec69c7ff5e9446 Seed (hex): a7305bc8df8d0951f0cb224c0e95d7707cbdf2c6ce7e8d481fec69c7ff5e9446
* Chain m * Chain m
* fpr: 00000000 * fpr: 00000000
* chain: 7762f9729fed06121fd13f326884c82f59aa95c57ac492ce8c9654e60efd130c * chain: 7762f9729fed06121fd13f326884c82f59aa95c57ac492ce8c9654e60efd130c
* prv: 3b8c18469a4634517d6d0b65448f8e6c62091b45540a1743c5846be55d47d88f * prv: 3b8c18469a4634517d6d0b65448f8e6c62091b45540a1743c5846be55d47d88f
* pub: 0383619fadcde31063d8c5cb00dbfe1713f3e6fa169d8541a798752a1c1ca0cb20 * pub: 0383619fadcde31063d8c5cb00dbfe1713f3e6fa169d8541a798752a1c1ca0cb20
## Implementation ## Implementation
- [Python implementation to generate test vectors](slip-0010/testvectors.py) * [Python implementation to generate test vectors](slip-0010/testvectors.py)
## References ## References
- [BIP-0032: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) * [BIP-0032: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
- [BIP-0039: Mnemonic code for generating deterministic keys](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) * [BIP-0039: Mnemonic code for generating deterministic keys](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki)
#SLIP-0011 : Symmetric encryption of key-value pairs using deterministic hierarchy # SLIP-0011 : Symmetric encryption of key-value pairs using deterministic hierarchy
``` ```
Number: SLIP-0011 Number: SLIP-0011
...@@ -11,17 +11,17 @@ Authors: Pavol Rusnak <stick@satoshilabs.com> ...@@ -11,17 +11,17 @@ Authors: Pavol Rusnak <stick@satoshilabs.com>
Created: 2014-06-12 Created: 2014-06-12
``` ```
##Abstract ## Abstract
This document is explaining symmetric encryption on hardware devices, using deterministic hierarchy. This document is explaining symmetric encryption on hardware devices, using deterministic hierarchy.
##Motivation ## Motivation
We want to provide a symmetric encryption in the hardware wallet, where the key doesn't exit the device, and where the user might be forced to confirm the encryption/decryption on the display. We want to provide a symmetric encryption in the hardware wallet, where the key doesn't exit the device, and where the user might be forced to confirm the encryption/decryption on the display.
##Body ## Body
###Overview ### Overview
The following data are sent to the hardware wallet: The following data are sent to the hardware wallet:
...@@ -41,11 +41,11 @@ IV can be either manually set, or it is computed together with the key. ...@@ -41,11 +41,11 @@ IV can be either manually set, or it is computed together with the key.
The value must be divisible into 16-byte blocks. The application has to pad the blocks itself and ensure safety; for example, by using PKCS7. The value must be divisible into 16-byte blocks. The application has to pad the blocks itself and ensure safety; for example, by using PKCS7.
###Details ### Details
The details are best explained on a slightly simplified code from TREZOR Python emulator. The details are best explained on a slightly simplified code from TREZOR Python emulator.
````python ```python
def _cipher_keyvalue(self, address_n, key, value, encrypt, ask_on_encrypt, ask_on_decrypt, iv): def _cipher_keyvalue(self, address_n, key, value, encrypt, ask_on_encrypt, ask_on_decrypt, iv):
if len(value) % 16 > 0: if len(value) % 16 > 0:
return Failure(message="Input length must be a multiple of 16") return Failure(message="Input length must be a multiple of 16")
...@@ -61,57 +61,57 @@ def _cipher_keyvalue(self, address_n, key, value, encrypt, ask_on_encrypt, ask_o ...@@ -61,57 +61,57 @@ def _cipher_keyvalue(self, address_n, key, value, encrypt, ask_on_encrypt, ask_o
else: else:
res = ''.join([aes.decrypt(value[i:i+16]) for i in range(0, len(value), 16)]) res = ''.join([aes.decrypt(value[i:i+16]) for i in range(0, len(value), 16)])
return CipheredKeyValue(value=res) return CipheredKeyValue(value=res)
```` ```
````python ```python
if len(value) % 16 > 0: if len(value) % 16 > 0:
return Failure(message="Input length must be a multiple of 16") return Failure(message="Input length must be a multiple of 16")
```` ```
First, the value is checked, if it is divisable into 16-byte blocks, since the symmetric cipher is block cipher. The application has to pad the blocks itself and ensure safety; for example, by using PKCS7. First, the value is checked, if it is divisable into 16-byte blocks, since the symmetric cipher is block cipher. The application has to pad the blocks itself and ensure safety; for example, by using PKCS7.
````python ```python
private_key = BIP32(self.storage.get_node()).get_private_node(list(address_n)).private_key private_key = BIP32(self.storage.get_node()).get_private_node(list(address_n)).private_key
```` ```
Private key of the BIP32 node is derived. Private key of the BIP32 node is derived.
````python ```python
key += "E1" if ask_on_encrypt else "E0" key += "E1" if ask_on_encrypt else "E0"
key += "D1" if ask_on_decrypt else "D0" key += "D1" if ask_on_decrypt else "D0"
```` ```
The key, displayed on the device, is concatenated with either E1 or E0 and either D1 or D0, depending on whether the confirmation is enabled in a given direction. The key, displayed on the device, is concatenated with either E1 or E0 and either D1 or D0, depending on whether the confirmation is enabled in a given direction.
````python ```python
secret = hmac.HMAC(key=private_key, msg=key, digestmod=hashlib.sha512).digest() secret = hmac.HMAC(key=private_key, msg=key, digestmod=hashlib.sha512).digest()
```` ```
The key, with the concatenated E1/E0 or D1/D0, is HMACed, with the private key from HD Node, with SHA512 as a hash function. The key, with the concatenated E1/E0 or D1/D0, is HMACed, with the private key from HD Node, with SHA512 as a hash function.
````python ```python
aes_key = secret[0:32] aes_key = secret[0:32]
aes_iv = iv if iv else secret[32:48] aes_iv = iv if iv else secret[32:48]
```` ```
The AES key is the first 32 bytes of the HMAC; the input vector is the next 16 bytes. The AES key is the first 32 bytes of the HMAC; the input vector is the next 16 bytes.
````python ```python
aes = pyaes.AESModeOfOperationCBC(key=aes_key, iv=aes_iv) aes = pyaes.AESModeOfOperationCBC(key=aes_key, iv=aes_iv)
```` ```
The algorithm is AES, in CBC mode. The algorithm is AES, in CBC mode.
````python ```python
if encrypt: if encrypt:
res = ''.join([aes.encrypt(value[i:i+16]) for i in range(0, len(value), 16)]) res = ''.join([aes.encrypt(value[i:i+16]) for i in range(0, len(value), 16)])
else: else:
res = ''.join([aes.decrypt(value[i:i+16]) for i in range(0, len(value), 16)]) res = ''.join([aes.decrypt(value[i:i+16]) for i in range(0, len(value), 16)])
```` ```
The result are the encrypted/decrypted blocks, concatenated together. The result are the encrypted/decrypted blocks, concatenated together.
##References ## References
The algorithm is implemented in [TREZOR firmware](https://github.com/trezor/trezor-mcu/blob/master/firmware/fsm.c) (function `fsm_msgCipherKeyValue`) and its [emulator](https://github.com/trezor/trezor-emu/blob/master/trezor/machine.py#L781) (function `_cipher_keyvalue`). The algorithm is implemented in [TREZOR firmware](https://github.com/trezor/trezor-mcu/blob/master/firmware/fsm.c) (function `fsm_msgCipherKeyValue`) and its [emulator](https://github.com/trezor/trezor-emu/blob/master/trezor/machine.py#L781) (function `_cipher_keyvalue`).
......
#SLIP-0012 : Public key encryption using deterministic hierarchy # SLIP-0012 : Public key encryption using deterministic hierarchy
``` ```
Number: SLIP-0012 Number: SLIP-0012
...@@ -10,20 +10,20 @@ Authors: Pavol Rusnak <stick@satoshilabs.com> ...@@ -10,20 +10,20 @@ Authors: Pavol Rusnak <stick@satoshilabs.com>
Created: 2014-06-12 Created: 2014-06-12
``` ```
##Abstract ## Abstract
This is a section for an abstract. This is a section for an abstract.
##Motivation ## Motivation
This is a section for a motivation. This is a section for a motivation.
##Body ## Body
This is a section for a body. The title of the section should be changed This is a section for a body. The title of the section should be changed
and the section can be split into multiple sections and subsections. and the section can be split into multiple sections and subsections.
##References ## References
This is a section for references such as links to other documents (BIP or SLIP) This is a section for references such as links to other documents (BIP or SLIP)
or to reference implementations. or to reference implementations.
...@@ -29,9 +29,9 @@ a) RFC 3986 URI `proto://[user@]host[:port][/path]` ...@@ -29,9 +29,9 @@ a) RFC 3986 URI `proto://[user@]host[:port][/path]`
Examples: Examples:
- https://example.com * `https://example.com`
- ftp://public@example.com/pub * `ftp://public@example.com/pub`
- ssh://root@example.com:2222 * `ssh://root@example.com:2222`
b) index (32-bit unsigned integer) b) index (32-bit unsigned integer)
...@@ -52,6 +52,7 @@ The index is used so one can generate more keys corresponding to the same URI. ...@@ -52,6 +52,7 @@ The index is used so one can generate more keys corresponding to the same URI.
6. Derive the HD node `m/13'/A'/B'/C'/D'` according to BIP32. 6. Derive the HD node `m/13'/A'/B'/C'/D'` according to BIP32.
### Worked example ### Worked example
1. `index + uri`=`0` + `https://satoshi@bitcoin.org/login` 1. `index + uri`=`0` + `https://satoshi@bitcoin.org/login`
2. `sha256(index + uri)` = `d0e2389d4c8394a9f3e32de01104bf6e8db2d9e2bb0905d60fffa5a18fd696db` 2. `sha256(index + uri)` = `d0e2389d4c8394a9f3e32de01104bf6e8db2d9e2bb0905d60fffa5a18fd696db`
...@@ -70,15 +71,17 @@ See a [Python example](https://github.com/trezor/python-trezor/blob/ca45019918bc ...@@ -70,15 +71,17 @@ See a [Python example](https://github.com/trezor/python-trezor/blob/ca45019918bc
Service issues the challenge consisting of three parts: Service issues the challenge consisting of three parts:
a) service identity described above (e.g. https://example.com 0) a) service identity described above (e.g. `https://example.com 0`)
b) hidden challenge b) hidden challenge
- random bytes sequence of maximum length 64
- this won't be shown to the user * random bytes sequence of maximum length 64
* this won't be shown to the user
c) visual challenge c) visual challenge
- arbitrary string of text of maximum length 64
- this will be shown to the user and we recommend using timestamp in `YYYY-MM-DD HH:MM:SS` format or similar * arbitrary string of text of maximum length 64
* this will be shown to the user and we recommend using timestamp in `YYYY-MM-DD HH:MM:SS` format or similar
Signer takes this data and computes the private key according to section HD Structure. Signer takes this data and computes the private key according to section HD Structure.
Then it concatenates sha256 hashes of challenge hidden and challenge visual and Then it concatenates sha256 hashes of challenge hidden and challenge visual and
...@@ -93,6 +96,6 @@ It's up to service operator to take this message and react in three possible way ...@@ -93,6 +96,6 @@ It's up to service operator to take this message and react in three possible way
## References ## References
- [BIP-0032: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) * [BIP-0032: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
- [BIP-0043: Purpose Field for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki) * [BIP-0043: Purpose Field for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki)
- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax](https://tools.ietf.org/html/rfc3986) * [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax](https://tools.ietf.org/html/rfc3986)
#SLIP-0014 : Stress Test Deterministic Wallet # SLIP-0014 : Stress Test Deterministic Wallet
``` ```
Number: SLIP-0014 Number: SLIP-0014
...@@ -9,19 +9,19 @@ Authors: Pavol Rusnak <stick@satoshilabs.com> ...@@ -9,19 +9,19 @@ Authors: Pavol Rusnak <stick@satoshilabs.com>
Created: 2015-01-12 Created: 2015-01-12
``` ```
##Abstract ## Abstract
SLIP-0014 describes a stress test deterministic wallet, which can be used SLIP-0014 describes a stress test deterministic wallet, which can be used
to test various cornercases that such wallet can encounter. to test various cornercases that such wallet can encounter.
##Motivation ## Motivation
During the development of myTREZOR deterministic wallet we realized there During the development of myTREZOR deterministic wallet we realized there
are quite a lot of different types of transactions in the network. In order are quite a lot of different types of transactions in the network. In order
to simplify testing of transaction history we came up with the idea to create to simplify testing of transaction history we came up with the idea to create
a special xpub that will contain these various types of transactions. a special xpub that will contain these various types of transactions.
##xpubs, xprvs, mnemonics, etc. ## mnemonic, xprvs and xpubs
``` ```
mnemonic: all all all all all all all all all all all all mnemonic: all all all all all all all all all all all all
...@@ -37,7 +37,7 @@ xpub6Ex8WCdj1KH5mK9r99QKENUmhpjEPgYm1dJmKY2nxx16tSAiQCVYjHfymFdzfpYDAHGtWYTif7Wk ...@@ -37,7 +37,7 @@ xpub6Ex8WCdj1KH5mK9r99QKENUmhpjEPgYm1dJmKY2nxx16tSAiQCVYjHfymFdzfpYDAHGtWYTif7Wk
[link to blockchain.info](https://blockchain.info/xpub/xpub6BiVtCpG9fQPxnPmHXG8PhtzQdWC2Su4qWu6XW9tpWFYhxydCLJGrWBJZ5H6qTAHdPQ7pQhtpjiYZVZARo14qHiay2fvrX996oEP42u8wZy) [link to blockchain.info](https://blockchain.info/xpub/xpub6BiVtCpG9fQPxnPmHXG8PhtzQdWC2Su4qWu6XW9tpWFYhxydCLJGrWBJZ5H6qTAHdPQ7pQhtpjiYZVZARo14qHiay2fvrX996oEP42u8wZy)
##Addresses ## Addresses
index | address | private key index | address | private key
------|------------------------------------|----------------------------------------------------- ------|------------------------------------|-----------------------------------------------------
...@@ -52,7 +52,7 @@ index | address | private key ...@@ -52,7 +52,7 @@ index | address | private key
8 | 1HRZDR7CmLnq59w6mtzNa7SHtVWPSxdgKA | Kx8nBDjAkXkykD62AF8XjP8W5Z4a79iZC8Z7axyDWXsZTcn5agzM 8 | 1HRZDR7CmLnq59w6mtzNa7SHtVWPSxdgKA | Kx8nBDjAkXkykD62AF8XjP8W5Z4a79iZC8Z7axyDWXsZTcn5agzM
9 | 1MPdvYLzcekvEzAB7DmiHa1oU8Foh4KUw8 | L1xWyxmCkjsB2Z9wnjoZ5TGabeg8KbpZt1PjgVsKA9pn3L7JCiTs 9 | 1MPdvYLzcekvEzAB7DmiHa1oU8Foh4KUw8 | L1xWyxmCkjsB2Z9wnjoZ5TGabeg8KbpZt1PjgVsKA9pn3L7JCiTs
##Transactions ## Transactions
# | block | transaction id | description # | block | transaction id | description
----|--------|------------------------------------------------------------------|--------------------------------- ----|--------|------------------------------------------------------------------|---------------------------------
...@@ -62,7 +62,7 @@ index | address | private key ...@@ -62,7 +62,7 @@ index | address | private key
4 | 341650 | a831a97917a3ae58a3c0cd700ed7ef08529b8218d3f71ed16152c7898c3d909e | regular outgoing transaction 4 | 341650 | a831a97917a3ae58a3c0cd700ed7ef08529b8218d3f71ed16152c7898c3d909e | regular outgoing transaction
5 | 342246 | f54fae106758ffa17822b0f959f267eb9514b2fd7e15b89a98dad6e319e2af0c | sent to myself (in same account) 5 | 342246 | f54fae106758ffa17822b0f959f267eb9514b2fd7e15b89a98dad6e319e2af0c | sent to myself (in same account)
##References ## References
- [BIP-0032: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) - [BIP-0032: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
- [BIP-0039: Mnemonic code for generating deterministic keys](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) - [BIP-0039: Mnemonic code for generating deterministic keys](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki)
......
#SLIP-0015 : Format for Bitcoin metadata and its encryption in HD wallets # SLIP-0015 : Format for Bitcoin metadata and its encryption in HD wallets
``` ```
Number: SLIP-0015 Number: SLIP-0015
...@@ -9,12 +9,12 @@ Authors: Karel Bilek <kb@karelbilek.com> ...@@ -9,12 +9,12 @@ Authors: Karel Bilek <kb@karelbilek.com>
Created: 2015-01-12 Created: 2015-01-12
``` ```
##Abstract ## Abstract
SLIP-0015 describes a format to save Bitcoin transaction metadata (labels to accounts, transactions) SLIP-0015 describes a format to save Bitcoin transaction metadata (labels to accounts, transactions)
in a secure way, with regard to HD wallets, especially (but not limited to) hardware HD wallets. in a secure way, with regard to HD wallets, especially (but not limited to) hardware HD wallets.
##Goals ## Goals
In myTREZOR web wallet, we need to save additional metadata, such as account labels or transaction labels. In myTREZOR web wallet, we need to save additional metadata, such as account labels or transaction labels.
We had several goals: We had several goals:
...@@ -33,7 +33,7 @@ the unsecure device. ...@@ -33,7 +33,7 @@ the unsecure device.
However, we want at least prevent the cloud storage operator to be able to read the metadata. We want to hide However, we want at least prevent the cloud storage operator to be able to read the metadata. We want to hide
the metadata itself from the cloud storage operator, and even the XPUBs of the accounts for deniability. the metadata itself from the cloud storage operator, and even the XPUBs of the accounts for deniability.
##General design ## General design
We first derive a *master key* from hardware device itself, which is shared for all accounts on the device. We first derive a *master key* from hardware device itself, which is shared for all accounts on the device.
...@@ -41,9 +41,9 @@ We then derive *account key* for every account. This key is a string -- because ...@@ -41,9 +41,9 @@ We then derive *account key* for every account. This key is a string -- because
From the account key, we derive both a filename and a symmetric encryption key. We then save the metadata to the fiven file, in an encrypted JSON. From the account key, we derive both a filename and a symmetric encryption key. We then save the metadata to the fiven file, in an encrypted JSON.
##Design details ## Design details
###Deriving master key ### Deriving master key
We first get the master key by sending CipherKeyValue to hardware device with following parameters We first get the master key by sending CipherKeyValue to hardware device with following parameters
...@@ -56,11 +56,9 @@ We first get the master key by sending CipherKeyValue to hardware device with fo ...@@ -56,11 +56,9 @@ We first get the master key by sending CipherKeyValue to hardware device with fo
CipherKeyValue is defined in [SLIP-0011](slip-0011.md). CipherKeyValue is defined in [SLIP-0011](slip-0011.md).
.. _trezor source code: https://github.com/trezor/trezor-mcu/blob/master/firmware/fsm.c#L451-L483
The master key should be 32 bytes (256 bits) long. It is treated as a pseudo-random byte sequence. The master key should be 32 bytes (256 bits) long. It is treated as a pseudo-random byte sequence.
###Deriving account key ### Deriving account key
From the master key, we derive the account key for every account in the following way: From the master key, we derive the account key for every account in the following way:
...@@ -72,13 +70,14 @@ where ...@@ -72,13 +70,14 @@ where
* master key is a byte sequence, as defined in the previous section * master key is a byte sequence, as defined in the previous section
* xpub is a string, as defined in BIP32. For example: * xpub is a string, as defined in BIP32. For example:
`xpub6BiVtCpG9fQPxnPmHXG8PhtzQdWC2Su4qWu6XW9tpWFYhxydCLJGrWBJZ5H6qTAHdPQ7pQhtpjiYZVZARo14qHiay2fvrX996oEP42u8wZy` `xpub6BiVtCpG9fQPxnPmHXG8PhtzQdWC2Su4qWu6XW9tpWFYhxydCLJGrWBJZ5H6qTAHdPQ7pQhtpjiYZVZARo14qHiay2fvrX996oEP42u8wZy`
Then, the result is converted to string using Base58Check encoding, as used in Bitcoin. Then, the result is converted to string using Base58Check encoding, as used in Bitcoin.
The API key is either 49 or 50 characters long. The API key is either 49 or 50 characters long.
###Deriving filename and password from account key ### Deriving filename and password from account key
We take the account key, *as a string*, and we use HMAC function to derive filename and password for metadata file. Every account has its own metadata file. We take the account key, *as a string*, and we use HMAC function to derive filename and password for metadata file. Every account has its own metadata file.
...@@ -111,7 +110,7 @@ We take the account key, *as a string*, and we use HMAC function to derive filen ...@@ -111,7 +110,7 @@ We take the account key, *as a string*, and we use HMAC function to derive filen
* the next 16 bytes are the GCM authentication tag * the next 16 bytes are the GCM authentication tag
* the rest is the ciphertext * the rest is the ciphertext
###Data format ### Data format
The (decrypted) metadata are in following format: The (decrypted) metadata are in following format:
...@@ -130,7 +129,7 @@ All labels can have any unicode letters. Empty string is treated in the software ...@@ -130,7 +129,7 @@ All labels can have any unicode letters. Empty string is treated in the software
An example object looks like this: An example object looks like this:
``` javascript ```javascript
{ {
"version": "1.0.0", "version": "1.0.0",
"accountLabel": "Saving account", // one file per account, so only 1 label needed "accountLabel": "Saving account", // one file per account, so only 1 label needed
...@@ -152,21 +151,19 @@ An example object looks like this: ...@@ -152,21 +151,19 @@ An example object looks like this:
(comments are of course not part of a valid JSON and are included here only for clarity) (comments are of course not part of a valid JSON and are included here only for clarity)
##Example ## Example
All the example code is in Python2. All the example code is in Python2.
###Deriving master key ### Deriving "master" key
Example code, deriving a master key from a connected TREZOR is in [1_masterkey.py](slip-0015/1_masterkey.py). It requires python-trezor_ installed and TREZOR connencted
.. _python-trezor: https://github.com/trezor/python-trezor Example code, deriving a master key from a connected TREZOR is in [1_masterkey.py](slip-0015/1_masterkey.py). It requires [python-trezor](https://github.com/trezor/python-trezor) installed and TREZOR connencted
For the "stress test" wallet, defined in SLIP-0014, the master key should be (in hex):: For the "stress test" wallet, defined in SLIP-0014, the master key should be (in hex)::
20c8bf0701213cdcf4c2f56fd0096c1772322d42fb9c4d0ddf6bb122d713d2f3 20c8bf0701213cdcf4c2f56fd0096c1772322d42fb9c4d0ddf6bb122d713d2f3
###Deriving account key ### Deriving "account" key
Example code, deriving an account key for master key, is in [2_accountkey.py](slip-0015/2_accountkey.py). First argument of the script is xpub of the account, the second argument is the master key from previous step (in hexadecimal). Example code, deriving an account key for master key, is in [2_accountkey.py](slip-0015/2_accountkey.py). First argument of the script is xpub of the account, the second argument is the master key from previous step (in hexadecimal).
...@@ -174,7 +171,7 @@ For the "stress test" wallet, defined in SLIP-0014, and its first account (with ...@@ -174,7 +171,7 @@ For the "stress test" wallet, defined in SLIP-0014, and its first account (with
v5kCxSKLTsnwmgPBeaRyFDWeG9zXouF34L72763zjLrS4LWy8 v5kCxSKLTsnwmgPBeaRyFDWeG9zXouF34L72763zjLrS4LWy8
###Deriving filename, decoding ### Deriving filename, decoding
Example code for decryption is in [3_decrypt.py](slip-0015/3_decrypt.py). First and only argument is the account key from previous step. The file has to be in a current working directory (in myTREZOR, we use `~/Dropbox/Apps/TREZOR/` for saving the files). Example code for decryption is in [3_decrypt.py](slip-0015/3_decrypt.py). First and only argument is the account key from previous step. The file has to be in a current working directory (in myTREZOR, we use `~/Dropbox/Apps/TREZOR/` for saving the files).
......
...@@ -26,17 +26,18 @@ Storage file is encrypted JSON object, which contains configuration, tags and se ...@@ -26,17 +26,18 @@ Storage file is encrypted JSON object, which contains configuration, tags and se
### Deriving master key ### Deriving master key
We derive masterKey from hardware device by sending cipherKeyValue with following params: We derive masterKey from hardware device by sending cipherKeyValue with following params:
- path: `m/10016'/0` (hardened path, see BIP32)
- ENC_KEY: `'Unlock encrypted storage?'` (max length message is 256 bytes) * path: `m/10016'/0` (hardened path, see BIP32)
- ENC_VALUE: `'2d650551248d792eabf628f451200d7f51cb63e46aadcbb1038aacb05e8c8aee2d650551248d792eabf628f451200d7f51cb63e46aadcbb1038aacb05e8c8aee'` (in hexadecimal (128 /2), max length is 1024 bytes) * ENC_KEY: `'Unlock encrypted storage?'` (max length message is 256 bytes)
- encrypt: `true` * ENC_VALUE: `'2d650551248d792eabf628f451200d7f51cb63e46aadcbb1038aacb05e8c8aee2d650551248d792eabf628f451200d7f51cb63e46aadcbb1038aacb05e8c8aee'` (in hexadecimal (128 /2), max length is 1024 bytes)
- ask_on_encrypt: `true` * encrypt: `true`
- ask_on_decrypt: `true` * ask_on_encrypt: `true`
- iv: unset * ask_on_decrypt: `true`
* iv: unset
JS EXAMPLE: JS EXAMPLE:
``` javascript ```javascript
session.cipherKeyValue( session.cipherKeyValue(
[(10016 | 0x80000000) >>> 0, 0], [(10016 | 0x80000000) >>> 0, 0],
'Unlock encrypted storage?', 'Unlock encrypted storage?',
...@@ -71,7 +72,7 @@ For encrypt/decrypt we are using `AES-256-GCM` algorithm. ...@@ -71,7 +72,7 @@ For encrypt/decrypt we are using `AES-256-GCM` algorithm.
- Input Vector (IV) is 12 randomly generated bytes - Input Vector (IV) is 12 randomly generated bytes
- GCM is used with full 128-bit autentication tag (authTag) - GCM is used with full 128-bit autentication tag (authTag)
for more: https://nodejs.org/api/crypto.html#crypto_crypto_createcipheriv_algorithm_key_iv [more info](https://nodejs.org/api/crypto.html#crypto_crypto_createcipheriv_algorithm_key_iv)
The result output stored in file is: The result output stored in file is:
...@@ -79,20 +80,23 @@ The result output stored in file is: ...@@ -79,20 +80,23 @@ The result output stored in file is:
- next 16 bytes is the GCM authTag - next 16 bytes is the GCM authTag
- the rest is output ciphertext - the rest is output ciphertext
for more: https://nodejs.org/api/crypto.html#crypto_crypto_createdecipheriv_algorithm_key_iv [more info](https://nodejs.org/api/crypto.html#crypto_crypto_createdecipheriv_algorithm_key_iv)
### Data format ### Data format
(Decrypted) data file is serialized JSON object with the following keys: (Decrypted) data file is serialized JSON object with the following keys:
- `version`: for future backwards compatibility and data storage manipualtion * `version`: for future backwards compatibility and data storage manipualtion
- `config`: for remembering personal setup of application * `config`: for remembering personal setup of application
- `tags`: contain set of labels with their icons (from icomoon set). Default tag is **All** and it is only tag, unable to edit or delete. * `tags`: contain set of labels with their icons (from icomoon set). Default tag is **All** and it is only tag, unable to edit or delete.
``` javascript
```javascript
{title:"My social networks", icon:"person", active:"active"} {title:"My social networks", icon:"person", active:"active"}
``` ```
- `entries`: is object of all password entries encrypted second time
``` javascript * `entries`: is object of all password entries encrypted second time
```javascript
{ {
"title": "http://wwww.github.com", "title": "http://wwww.github.com",
"username": "Satoshi Nakamoto", "username": "Satoshi Nakamoto",
...@@ -124,7 +128,7 @@ Step by step entry encryption: ...@@ -124,7 +128,7 @@ Step by step entry encryption:
EXAMPLE: EXAMPLE:
``` javascript ```javascript
session.cipherKeyValue( session.cipherKeyValue(
[(10016 | 0x80000000) >>> 0, 0], // same path [(10016 | 0x80000000) >>> 0, 0], // same path
'Unlock github.com for user Satoshi Nakamoto?', 'Unlock github.com for user Satoshi Nakamoto?',
...@@ -143,7 +147,7 @@ true) // askOnDecrypt? we want this becuase otherwise somebody could rob us! ...@@ -143,7 +147,7 @@ true) // askOnDecrypt? we want this becuase otherwise somebody could rob us!
EXAMPLE: EXAMPLE:
``` javascript ```javascript
session.cipherKeyValue( session.cipherKeyValue(
[(10016 | 0x80000000) >>> 0, 0], // same path [(10016 | 0x80000000) >>> 0, 0], // same path
'Unlock github.com for user Satoshi Nakamoto?', 'Unlock github.com for user Satoshi Nakamoto?',
......
#SLIP-0017 : ECDH using deterministic hierarchy # SLIP-0017 : ECDH using deterministic hierarchy
``` ```
Number: SLIP-0017 Number: SLIP-0017
...@@ -9,18 +9,18 @@ Authors: Roman Zeyde <roman.zeyde@gmail.com> ...@@ -9,18 +9,18 @@ Authors: Roman Zeyde <roman.zeyde@gmail.com>
Created: 2016-05-29 Created: 2016-05-29
``` ```
##Abstract ## Abstract
This document describes a method for implementing Elliptic Curve This document describes a method for implementing Elliptic Curve
Diffie-Hellman algorithm, using a determinstic hierarchy. Diffie-Hellman algorithm, using a determinstic hierarchy.
##Motivation ## Motivation
Using Deterministic Hierarchy for encryption and decryption is ideal, Using Deterministic Hierarchy for encryption and decryption is ideal,
because the same concepts of easy backup that relate to backing up because the same concepts of easy backup that relate to backing up
deterministic wallets can be applied to backing up private keys. deterministic wallets can be applied to backing up private keys.
##Service Identity ## Service Identity
Let's introduce the service identity. It consists of two elements: Let's introduce the service identity. It consists of two elements:
...@@ -28,9 +28,9 @@ a) RFC 3986 URI `proto://[user@]host[:port][/path]` ...@@ -28,9 +28,9 @@ a) RFC 3986 URI `proto://[user@]host[:port][/path]`
Examples: Examples:
- https://example.com * `https://example.com`
- ftp://public@example.com/pub * `ftp://public@example.com/pub`
- ssh://root@example.com:2222 * `ssh://root@example.com:2222`
b) index (32-bit unsigned integer) b) index (32-bit unsigned integer)
...@@ -50,7 +50,7 @@ The index is used so one can generate more keys corresponding to the same URI. ...@@ -50,7 +50,7 @@ The index is used so one can generate more keys corresponding to the same URI.
6. Derive the HD node `m/17'/A'/B'/C'/D'` according to BIP32. 6. Derive the HD node `m/17'/A'/B'/C'/D'` according to BIP32.
##Shared secret generation ## Shared secret generation
Suppose that Alice and Bob need to agree on a shared secret. Suppose that Alice and Bob need to agree on a shared secret.
...@@ -67,6 +67,6 @@ similar way by Bob (since `Q = k2*P1`), is used to derive a shared secret. ...@@ -67,6 +67,6 @@ similar way by Bob (since `Q = k2*P1`), is used to derive a shared secret.
## References ## References
- [BIP-0032: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) * [BIP-0032: Hierarchical Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
- [BIP-0043: Purpose Field for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki) * [BIP-0043: Purpose Field for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki)
- [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax](https://tools.ietf.org/html/rfc3986) * [RFC 3986: Uniform Resource Identifier (URI): Generic Syntax](https://tools.ietf.org/html/rfc3986)
#SLIP-0044 : Registered coin types for BIP-0044 # SLIP-0044 : Registered coin types for BIP-0044
``` ```
Number: SLIP-0044 Number: SLIP-0044
...@@ -10,17 +10,17 @@ Authors: Pavol Rusnak <stick@satoshilabs.com> ...@@ -10,17 +10,17 @@ Authors: Pavol Rusnak <stick@satoshilabs.com>
Created: 2014-07-09 Created: 2014-07-09
``` ```
##Abstract ## Abstract
BIP-0044 defines a logical hierarchy for deterministic wallets. BIP-0044 defines a logical hierarchy for deterministic wallets.
Level 2 of the hierarchy describes a coin type in use. Level 2 of the hierarchy describes a coin type in use.
##Motivation ## Motivation
BIP repository does not want to deal with assigning the values for various BIP repository does not want to deal with assigning the values for various
coin types different than Bitcoin so we propose this SLIP to become such body. coin types different than Bitcoin so we propose this SLIP to become such body.
##Registered coin types ## Registered coin types
These are the registered coin types for usage in level 2 of BIP44 described in chapter "Coin type". These are the registered coin types for usage in level 2 of BIP44 described in chapter "Coin type".
...@@ -136,10 +136,10 @@ index | hexa | coin ...@@ -136,10 +136,10 @@ index | hexa | coin
Coin types will be added only if there is a wallet implementing BIP-0044 for desired coin. Coin types will be added only if there is a wallet implementing BIP-0044 for desired coin.
##Libraries ## Libraries
* [BIP44-constants](https://www.npmjs.com/package/bip44-constants) ([source](http://github.com/bitcoinjs/bip44-constants)) JavaScript package with described coin types * [BIP44-constants](https://www.npmjs.com/package/bip44-constants) ([source](http://github.com/bitcoinjs/bip44-constants)) JavaScript package with described coin types
##References ## References
- [BIP-0044: Multi-Account Hierarchy for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) * [BIP-0044: Multi-Account Hierarchy for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)
...@@ -116,10 +116,10 @@ Disadvantages are: ...@@ -116,10 +116,10 @@ Disadvantages are:
Index | Network | Roles Index | Network | Roles
---------------|-------------|--------------------------------------------------------- ---------------|-------------|---------------------------------------------------------
0x00000000 | Steem | `0x0`: owner, `0x1`: active, `0x3`: memo, `0x4`: posting 0x00000000 | Steem | `0x0`: owner, `0x1`: active, `0x3`: memo, `0x4`: posting
0x00000001 | BitShares | `0x0`: owner, `0x1`: active, `0x3`: memo 0x00000001 | BitShares | `0x0`: owner, `0x1`: active, `0x3`: memo
0x00000002 | PeerPlays | `0x0`: owner, `0x1`: active, `0x3`: memo 0x00000002 | PeerPlays | `0x0`: owner, `0x1`: active, `0x3`: memo
0x00000003 | Muse | `0x0`: owner, `0x1`: active, `0x3`: memo 0x00000003 | Muse | `0x0`: owner, `0x1`: active, `0x3`: memo
## Examples ## Examples
...@@ -130,4 +130,4 @@ BitShares | forth | owner | forth | m / 48' / 1' / 3' / 0' ...@@ -130,4 +130,4 @@ BitShares | forth | owner | forth | m / 48' / 1' / 3' / 0'
## References ## References
- [BIP-0044: Multi-Account Hierarchy for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki) * [BIP-0044: Multi-Account Hierarchy for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment