@@ -3,12 +3,29 @@ const merkle = require('../lib/merkle');
3
3
const sign = require ( '../lib/sign' ) ;
4
4
const sender = require ( '../lib/message' ) ;
5
5
const file = require ( '../lib/file' ) ;
6
- const { intToTrytes , padTritsMultipleOf , digest } = require ( '../lib/helpers' ) ;
6
+ const { digest } = require ( '../lib/helpers' ) ;
7
7
const fs = require ( 'fs' ) ;
8
8
const iota = require ( '@iota/core' ) . composeAPI ( {
9
9
provider : 'https://node.deviceproof.org' ,
10
10
} ) ;
11
11
12
+ function generateSeed ( length = 81 ) {
13
+ const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ9' ;
14
+ const retVal = [ 81 ] ;
15
+ for ( let i = 0 , n = charset . length ; i < length ; ++ i ) {
16
+ retVal [ i ] = charset . charAt ( Math . floor ( Math . random ( ) * n ) ) ;
17
+ }
18
+ const result = retVal . join ( '' ) ;
19
+ return result ;
20
+ }
21
+
22
+ function verify ( merkleRoot , sig , message , verifyingKey , index , authPathHashes , nextRoot ) {
23
+ const sigDigest = digest ( message , index , authPathHashes , verifyingKey , nextRoot ) ;
24
+ const verified = sign . verifyMessage ( sig , sigDigest , verifyingKey ) ;
25
+ const authenticated = merkle . verifyMerkleTree ( merkleRoot , verifyingKey , index , authPathHashes ) ;
26
+ return verified && authenticated ;
27
+ }
28
+
12
29
( async ( ) => {
13
30
try {
14
31
const channelPassword = '' ;
@@ -24,7 +41,7 @@ const iota = require('@iota/core').composeAPI({
24
41
security,
25
42
progressCallback : ( leafs , hashes ) => {
26
43
generated += leafs . length ;
27
- console . log ( `${ Math . floor ( ( generated / Math . pow ( 2 , h ) ) * 10000 ) / 100 } % complete` ) ;
44
+ console . log ( `${ Math . floor ( ( generated / ( 2 ** h ) ) * 10000 ) / 100 } % complete` ) ;
28
45
callback ( leafs , hashes ) ;
29
46
} ,
30
47
} ) ;
@@ -45,7 +62,6 @@ const iota = require('@iota/core').composeAPI({
45
62
const authPath = merkle . getAuthPath ( index , height ) ;
46
63
console . log ( 'Auth path:' , authPath ) ;
47
64
const authPathHashes = authPath . map ( ( i , level ) => hashes [ level ] [ i ] . hash ) ;
48
- // await forge(merkleRoot, index, channelPassword)
49
65
50
66
const { private : signingKey , public : verifyingKey } = leafs [ index ] ;
51
67
console . log ( `Using ${ index } th message to sign message '${ message . slice ( 0 , 81 ) } '...` ) ;
@@ -58,87 +74,54 @@ const iota = require('@iota/core').composeAPI({
58
74
console . log ( 'Verified:' , verify ( merkleRoot , sig , message , verifyingKey , index , authPathHashes , nextRoot ) ) ;
59
75
60
76
console . log ( 'Publishing message...' ) ;
61
- const { bundle } = await sender . sendMessage ( iota , merkleRoot , message , sig , index , verifyingKey , authPathHashes , { channelPassword, nextRoot } ) ;
77
+ const { bundle } = await sender . sendMessage (
78
+ iota , merkleRoot , message ,
79
+ sig , index , verifyingKey ,
80
+ authPathHashes , { channelPassword, nextRoot } ,
81
+ ) ;
62
82
console . log ( 'Bundle:' , bundle [ 0 ] . bundle ) ;
63
83
64
84
console . log ( 'Getting message...' ) ;
65
- const { message : tangleMessage , skipped } = await sender . getMessage ( iota , merkleRoot , index , { channelPassword, height, security } ) ;
85
+ const { message : tangleMessage , skipped } = await sender . getMessage (
86
+ iota , merkleRoot , index ,
87
+ {
88
+ channelPassword,
89
+ height,
90
+ security,
91
+ } ,
92
+ ) ;
66
93
skipped . forEach ( e => console . error ( `Bundle ${ e . bundle } -` , e . error ) ) ;
67
94
console . log ( {
68
95
index : tangleMessage . index ,
69
96
signature : `${ converter . trytes ( tangleMessage . signature ) . slice ( 0 , 81 ) } ...` ,
70
97
message : `${ converter . trytesToAscii ( tangleMessage . message ) . slice ( 0 , 243 ) } ...` ,
71
- authPathHashes : tangleMessage . authPathHashes . map ( h => `${ converter . trytes ( h ) . slice ( 0 , 81 ) } ...` ) ,
98
+ authPathHashes : tangleMessage . authPathHashes . map ( hh => `${ converter . trytes ( hh ) . slice ( 0 , 81 ) } ...` ) ,
72
99
verifyingKey : `${ converter . trytes ( tangleMessage . verifyingKey ) . slice ( 0 , 81 ) } ...` ,
73
100
nextRoot : `${ converter . trytes ( tangleMessage . nextRoot ) . slice ( 0 , 81 ) } ...` ,
74
101
} ) ;
75
102
76
103
// Verifying message
77
- const tangleDigest = digest ( tangleMessage . message , tangleMessage . index , tangleMessage . authPathHashes , tangleMessage . verifyingKey , tangleMessage . nextRoot ) ;
104
+ const tangleDigest = digest (
105
+ tangleMessage . message , tangleMessage . index ,
106
+ tangleMessage . authPathHashes ,
107
+ tangleMessage . verifyingKey ,
108
+ tangleMessage . nextRoot ,
109
+ ) ;
78
110
console . log ( 'Signature valid:' , converter . trytes ( sig ) == converter . trytes ( tangleMessage . signature ) ) ;
79
111
console . log ( 'Auth path valid:' , authPathHashes
80
- . map ( ( h , i ) => converter . trytes ( h ) == converter . trytes ( tangleMessage . authPathHashes [ i ] ) )
112
+ . map ( ( hh , i ) => converter . trytes ( hh ) == converter . trytes ( tangleMessage . authPathHashes [ i ] ) )
81
113
. reduce ( ( acc , v ) => acc && v , true ) ) ;
82
114
console . log ( 'Verifying key valid:' , converter . trytes ( verifyingKey ) == converter . trytes ( tangleMessage . verifyingKey ) ) ;
83
115
84
116
console . log ( 'Message verified:' , sign . verifyMessage ( tangleMessage . signature , tangleDigest , tangleMessage . verifyingKey ) ) ;
85
117
console . log (
86
118
'Signature authenticated:' ,
87
- merkle . verifyMerkleTree ( merkleRoot , tangleMessage . verifyingKey , tangleMessage . index , tangleMessage . authPathHashes ) ,
119
+ merkle . verifyMerkleTree (
120
+ merkleRoot , tangleMessage . verifyingKey ,
121
+ tangleMessage . index , tangleMessage . authPathHashes ,
122
+ ) ,
88
123
) ;
89
124
} catch ( err ) {
90
125
console . error ( err ) ;
91
126
}
92
127
} ) ( ) ;
93
-
94
- async function forge ( merkleRoot , index , password ) {
95
- const indexTrits = converter . trits ( intToTrytes ( index ) ) ;
96
- const add = require ( '@iota/signing/out/signing/src/add' ) . default ;
97
- const Kerl = require ( '@iota/kerl' ) . default ;
98
-
99
- const subroot = add ( merkleRoot , indexTrits ) ;
100
- const kerl = new Kerl ( ) ;
101
- kerl . initialize ( ) ;
102
- kerl . absorb ( subroot , 0 , subroot . length ) ;
103
- if ( password ) {
104
- const padded = padTritsMultipleOf ( Kerl . HASH_LENGTH , Kerl . HASH_LENGTH , password ) ;
105
- kerl . absorb ( padded , 0 , padded . length ) ;
106
- }
107
- const buffer = new Int8Array ( Kerl . HASH_LENGTH ) ;
108
- kerl . squeeze ( buffer , 0 , Kerl . HASH_LENGTH ) ;
109
- const address = converter . trytes ( buffer ) ;
110
-
111
- const transfers = [ {
112
- address,
113
- value : 0 ,
114
- message : 'SDFGHJBVCSRTZUJBVCSERTZHBVCD' ,
115
- } , {
116
- address,
117
- value : 0 ,
118
- message : 'ERTZHJNBVCSRTZHBVCRTHBVCDRTGHBV' ,
119
- } , {
120
- address,
121
- value : 0 ,
122
- message : 'WILLITBESKIPPED' ,
123
- } ] ;
124
- const trytes = await iota . prepareTransfers ( '9' . repeat ( 81 ) , transfers ) ;
125
- const bundle = await iota . sendTrytes ( trytes , 3 , 9 ) ;
126
- console . log ( 'Forged bundle:' , bundle [ 0 ] . bundle ) ;
127
- }
128
-
129
- function verify ( merkleRoot , sig , message , verifyingKey , index , authPathHashes , nextRoot ) {
130
- const sigDigest = digest ( message , index , authPathHashes , verifyingKey , nextRoot ) ;
131
- const verified = sign . verifyMessage ( sig , sigDigest , verifyingKey ) ;
132
- const authenticated = merkle . verifyMerkleTree ( merkleRoot , verifyingKey , index , authPathHashes ) ;
133
- return verified && authenticated ;
134
- }
135
-
136
- function generateSeed ( length = 81 ) {
137
- const charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ9' ;
138
- const retVal = [ 81 ] ;
139
- for ( let i = 0 , n = charset . length ; i < length ; ++ i ) {
140
- retVal [ i ] = charset . charAt ( Math . floor ( Math . random ( ) * n ) ) ;
141
- }
142
- const result = retVal . join ( '' ) ;
143
- return result ;
144
- }
0 commit comments