25
25
import shared
26
26
import state
27
27
import tr
28
- from addresses import (
29
- calculateInventoryHash , decodeAddress , decodeVarint , encodeVarint
30
- )
28
+ from addresses import decodeAddress , decodeVarint , encodeVarint
31
29
from bmconfigparser import BMConfigParser
32
30
from helper_sql import sqlExecute , sqlQuery
33
31
from inventory import Inventory
@@ -75,18 +73,16 @@ def run(self):
75
73
queryreturn = sqlQuery (
76
74
'''SELECT DISTINCT toaddress FROM sent'''
77
75
''' WHERE (status='awaitingpubkey' AND folder='sent')''' )
78
- for row in queryreturn :
79
- toAddress , = row
80
- # toStatus
81
- _ , toAddressVersionNumber , toStreamNumber , toRipe = \
82
- decodeAddress (toAddress )
76
+ for toAddress , in queryreturn :
77
+ toAddressVersionNumber , toStreamNumber , toRipe = \
78
+ decodeAddress (toAddress )[1 :]
83
79
if toAddressVersionNumber <= 3 :
84
80
state .neededPubkeys [toAddress ] = 0
85
81
elif toAddressVersionNumber >= 4 :
86
- doubleHashOfAddressData = hashlib . sha512 ( hashlib . sha512 (
87
- encodeVarint (toAddressVersionNumber ) +
88
- encodeVarint (toStreamNumber ) + toRipe
89
- ). digest ()). digest ()
82
+ doubleHashOfAddressData = highlevelcrypto . double_sha512 (
83
+ encodeVarint (toAddressVersionNumber )
84
+ + encodeVarint (toStreamNumber ) + toRipe
85
+ )
90
86
# Note that this is the first half of the sha512 hash.
91
87
privEncryptionKey = doubleHashOfAddressData [:32 ]
92
88
tag = doubleHashOfAddressData [32 :]
@@ -290,7 +286,7 @@ def doPOWForMyV2Pubkey(self, adressHash):
290
286
payload = self ._doPOWDefaults (
291
287
payload , TTL , log_prefix = '(For pubkey message)' )
292
288
293
- inventoryHash = calculateInventoryHash (payload )
289
+ inventoryHash = highlevelcrypto . calculateInventoryHash (payload )
294
290
objectType = 1
295
291
Inventory ()[inventoryHash ] = (
296
292
objectType , streamNumber , payload , embeddedTime , '' )
@@ -379,7 +375,7 @@ def sendOutOrStoreMyV3Pubkey(self, adressHash):
379
375
payload = self ._doPOWDefaults (
380
376
payload , TTL , log_prefix = '(For pubkey message)' )
381
377
382
- inventoryHash = calculateInventoryHash (payload )
378
+ inventoryHash = highlevelcrypto . calculateInventoryHash (payload )
383
379
objectType = 1
384
380
Inventory ()[inventoryHash ] = (
385
381
objectType , streamNumber , payload , embeddedTime , '' )
@@ -452,10 +448,10 @@ def sendOutOrStoreMyV4Pubkey(self, myAddress):
452
448
# unencrypted, the pubkey with part of the hash so that nodes
453
449
# know which pubkey object to try to decrypt
454
450
# when they want to send a message.
455
- doubleHashOfAddressData = hashlib . sha512 ( hashlib . sha512 (
456
- encodeVarint (addressVersionNumber ) +
457
- encodeVarint (streamNumber ) + addressHash
458
- ). digest ()). digest ()
451
+ doubleHashOfAddressData = highlevelcrypto . double_sha512 (
452
+ encodeVarint (addressVersionNumber )
453
+ + encodeVarint (streamNumber ) + addressHash
454
+ )
459
455
payload += doubleHashOfAddressData [32 :] # the tag
460
456
signature = highlevelcrypto .sign (
461
457
payload + dataToEncrypt , privSigningKeyHex , self .digestAlg )
@@ -471,7 +467,7 @@ def sendOutOrStoreMyV4Pubkey(self, myAddress):
471
467
payload = self ._doPOWDefaults (
472
468
payload , TTL , log_prefix = '(For pubkey message)' )
473
469
474
- inventoryHash = calculateInventoryHash (payload )
470
+ inventoryHash = highlevelcrypto . calculateInventoryHash (payload )
475
471
objectType = 1
476
472
Inventory ()[inventoryHash ] = (
477
473
objectType , streamNumber , payload , embeddedTime ,
@@ -507,7 +503,7 @@ def sendOnionPeerObj(self, peer=None):
507
503
objectType = protocol .OBJECT_ONIONPEER
508
504
# FIXME: ideally the objectPayload should be signed
509
505
objectPayload = encodeVarint (peer .port ) + protocol .encodeHost (peer .host )
510
- tag = calculateInventoryHash (objectPayload )
506
+ tag = highlevelcrypto . calculateInventoryHash (objectPayload )
511
507
512
508
if Inventory ().by_type_and_tag (objectType , tag ):
513
509
return # not expired
@@ -521,7 +517,7 @@ def sendOnionPeerObj(self, peer=None):
521
517
payload = self ._doPOWDefaults (
522
518
payload , TTL , log_prefix = '(For onionpeer object)' )
523
519
524
- inventoryHash = calculateInventoryHash (payload )
520
+ inventoryHash = highlevelcrypto . calculateInventoryHash (payload )
525
521
Inventory ()[inventoryHash ] = (
526
522
objectType , streamNumber , buffer (payload ),
527
523
embeddedTime , buffer (tag )
@@ -615,10 +611,10 @@ def sendBroadcast(self):
615
611
616
612
payload += encodeVarint (streamNumber )
617
613
if addressVersionNumber >= 4 :
618
- doubleHashOfAddressData = hashlib . sha512 ( hashlib . sha512 (
619
- encodeVarint (addressVersionNumber ) +
620
- encodeVarint (streamNumber ) + ripe
621
- ). digest ()). digest ()
614
+ doubleHashOfAddressData = highlevelcrypto . double_sha512 (
615
+ encodeVarint (addressVersionNumber )
616
+ + encodeVarint (streamNumber ) + ripe
617
+ )
622
618
tag = doubleHashOfAddressData [32 :]
623
619
payload += tag
624
620
else :
@@ -688,7 +684,7 @@ def sendBroadcast(self):
688
684
)
689
685
continue
690
686
691
- inventoryHash = calculateInventoryHash (payload )
687
+ inventoryHash = highlevelcrypto . calculateInventoryHash (payload )
692
688
objectType = 3
693
689
Inventory ()[inventoryHash ] = (
694
690
objectType , streamNumber , payload , embeddedTime , tag )
@@ -797,10 +793,10 @@ def sendMsg(self):
797
793
if toAddressVersionNumber <= 3 :
798
794
toTag = ''
799
795
else :
800
- toTag = hashlib . sha512 ( hashlib . sha512 (
801
- encodeVarint (toAddressVersionNumber ) +
802
- encodeVarint (toStreamNumber ) + toRipe
803
- ). digest ()). digest () [32 :]
796
+ toTag = highlevelcrypto . double_sha512 (
797
+ encodeVarint (toAddressVersionNumber )
798
+ + encodeVarint (toStreamNumber ) + toRipe
799
+ )[32 :]
804
800
if toaddress in state .neededPubkeys or \
805
801
toTag in state .neededPubkeys :
806
802
# We already sent a request for the pubkey
@@ -834,11 +830,11 @@ def sendMsg(self):
834
830
# already contains the toAddress and cryptor
835
831
# object associated with the tag for this toAddress.
836
832
if toAddressVersionNumber >= 4 :
837
- doubleHashOfToAddressData = hashlib . sha512 (
838
- hashlib . sha512 (
839
- encodeVarint (toAddressVersionNumber ) + encodeVarint ( toStreamNumber ) + toRipe
840
- ). digest ()
841
- ). digest ( )
833
+ doubleHashOfToAddressData = \
834
+ highlevelcrypto . double_sha512 (
835
+ encodeVarint (toAddressVersionNumber )
836
+ + encodeVarint ( toStreamNumber ) + toRipe
837
+ )
842
838
# The first half of the sha512 hash.
843
839
privEncryptionKey = doubleHashOfToAddressData [:32 ]
844
840
# The second half of the sha512 hash.
@@ -1304,7 +1300,7 @@ def sendMsg(self):
1304
1300
)
1305
1301
continue
1306
1302
1307
- inventoryHash = calculateInventoryHash (encryptedPayload )
1303
+ inventoryHash = highlevelcrypto . calculateInventoryHash (encryptedPayload )
1308
1304
objectType = 2
1309
1305
Inventory ()[inventoryHash ] = (
1310
1306
objectType , toStreamNumber , encryptedPayload , embeddedTime , '' )
@@ -1354,8 +1350,7 @@ def sendMsg(self):
1354
1350
# the message in our own inbox.
1355
1351
if BMConfigParser ().has_section (toaddress ):
1356
1352
# Used to detect and ignore duplicate messages in our inbox
1357
- sigHash = hashlib .sha512 (hashlib .sha512 (
1358
- signature ).digest ()).digest ()[32 :]
1353
+ sigHash = highlevelcrypto .double_sha512 (signature )[32 :]
1359
1354
t = (inventoryHash , toaddress , fromaddress , subject , int (
1360
1355
time .time ()), message , 'inbox' , encoding , 0 , sigHash )
1361
1356
helper_inbox .insert (t )
@@ -1410,16 +1405,13 @@ def requestPubKey(self, toAddress):
1410
1405
# neededPubkeys dictionary. But if we are recovering
1411
1406
# from a restart of the client then we have to put it in now.
1412
1407
1413
- # Note that this is the first half of the sha512 hash.
1414
- privEncryptionKey = hashlib . sha512 ( hashlib . sha512 (
1415
- encodeVarint (addressVersionNumber ) +
1416
- encodeVarint ( streamNumber ) + ripe
1417
- ). digest ()). digest () [:32 ]
1408
+ doubleHashOfAddressData = highlevelcrypto . double_sha512 (
1409
+ encodeVarint ( addressVersionNumber )
1410
+ + encodeVarint (streamNumber ) + ripe
1411
+ )
1412
+ privEncryptionKey = doubleHashOfAddressData [:32 ]
1418
1413
# Note that this is the second half of the sha512 hash.
1419
- tag = hashlib .sha512 (hashlib .sha512 (
1420
- encodeVarint (addressVersionNumber ) +
1421
- encodeVarint (streamNumber ) + ripe
1422
- ).digest ()).digest ()[32 :]
1414
+ tag = doubleHashOfAddressData [32 :]
1423
1415
if tag not in state .neededPubkeys :
1424
1416
# We'll need this for when we receive a pubkey reply:
1425
1417
# it will be encrypted and we'll need to decrypt it.
@@ -1462,7 +1454,7 @@ def requestPubKey(self, toAddress):
1462
1454
1463
1455
payload = self ._doPOWDefaults (payload , TTL )
1464
1456
1465
- inventoryHash = calculateInventoryHash (payload )
1457
+ inventoryHash = highlevelcrypto . calculateInventoryHash (payload )
1466
1458
objectType = 1
1467
1459
Inventory ()[inventoryHash ] = (
1468
1460
objectType , streamNumber , payload , embeddedTime , '' )
0 commit comments