Esempio n. 1
0
def verifySignature( publicKey, data, updateLevel, signature ) :
    payload = encode( ('DHT-DATA',data,updateLevel) )
    if type(publicKey) is str :
        k = RSAKey()
        try :
            k.fromDER_PublicKey( publicKey )
        except RSAError :
            return False
    else :
        k = publicKey
    try :
        digest = Digest(digestType).digest( payload )
        k.verify( signature, digest, digestType )
        return True
    except RSAError :
        return False
Esempio n. 2
0
 def _doConnectPubKey( self, words ) :
     if len(words) != 2 :
         self._writeError( 'Malformed request' )
         return
     hexPubKey, service = words
     if not self.session.isOnline() :
         self._writeError( 'Not online' )
         return
     try :
         pubKeyData = hexDecode( hexPubKey )
         pubKey = RSAKey()
         pubKey.fromDER_PublicKey( pubKeyData )
     except (HexDecodeError,RSAError) :
         self._writeError( 'Malformed publickey' )
         return
     self._connectInternal( pubKey, service )
Esempio n. 3
0
def loadProfile( entry, password, location='CSpaceProfiles') :
    ps = profileSettings(location)
    userName = ps.getData( entry+'/Name' )
    keyId = ps.getData( entry+'/KeyID' )
    encKey = ps.getData( entry+'/PrivateKey' )
    rsaKey = RSAKey()
    try :
        rsaKey.fromPEM_PrivateKey( encKey, password )
    except RSAError :
        return None
    profile = Profile( rsaKey, userName, keyId, entry )
    contactsData = ps.getData( entry+'/ContactList', '' )
    for line in contactsData.split('\n') :
        line = line.strip()
        if not line : continue
        name,hexKey = line.split(':')
        assert isValidUserName(name)
        pubKey = RSAKey()
        pubKey.fromDER_PublicKey( hexDecode(hexKey) )
        contact = Contact( pubKey, name )
        profile.addContact( contact )
    return profile