#334 closed defect (fixed)

pycryptopp: some features require more careful linking than Ubuntu Gutsy default build provides

Reported by: zooko Owned by: zooko
Priority: major Milestone: eventually
Component: code Version: 0.8.0
Keywords: Cc: warner
Launchpad Bug:


Per the pycryptopp buildbot waterfall, Ubuntu Gutsy's versions of Crypto++ and/or g++ fall afoul of this problem:


(Side note: the reporter in that mailing list message is Eric Hughes, visionary author of The Cypherpunk Manifesto and the Universal Piracy Network (an early, and possibly the first, elucidation of the "darknet" or "illicit file-sharing network" idea), and the guy who hired Bram Cohen and me in 1999.)

Change History (5)

comment:1 Changed at 2008-03-08T04:05:51Z by zooko

Here is an explanation for the actual problem:


I suspect, but haven't confirmed, that newer versions of Crypto++ work-around this issue. Hm... but the Crypto++ "What's New?" page doesn't mention this explicitly. Perhaps it's partly caused by the way the Ubuntu Gutsy and Debian stable Crypto++ libraries are built?

To shed light on this this, someone should try Crypto++ v5.5.2 on Ubuntu Gutsy and see if it works, try Crypto++ v5.5 as provided in the .deb package for Ubuntu Gutsy, and see if it fails just as the buildslave does and then compile Crypto++ v5.5 from source on Ubuntu Gutsy and see if that also fails.

comment:2 Changed at 2008-03-08T04:14:39Z by zooko

  • Milestone changed from 0.9.0 (Allmydata 3.0 final) to undecided

comment:3 Changed at 2008-03-08T04:22:26Z by zooko

  • Summary changed from pycryptopp relies on a feature of C++ which isn't implemented in many platforms to pycryptopp: some features require more careful linking than Ubuntu Gutsy default build provides

Three optional features of pycryptopp: SHA256.hexdigest(), handling of invalid key lengths, and ECDSA, all try to compare run-time type information ("RTTI") across dynamic linking boundaries. This works -- for some reason -- on many platforms and fails on others. I believe it is possible to do the linking carefully so that each type which you intend to compare (including catching an exception according to its exception type) is defined exactly once, so that g++'s modern behavior of comparing such things by reference instead of by string comparison on their name will work.

Currently, Tahoe does not use any of these three features of pycryptopp.

comment:4 Changed at 2008-04-24T23:32:05Z by warner

  • Component changed from code-encoding to code

comment:5 Changed at 2008-05-15T12:41:17Z by zooko

  • Resolution set to fixed
  • Status changed from new to closed

This is fixed by pycryptopp >= 0.5 or so.

Note: See TracTickets for help on using tickets.