I spent a little time today playing with OpenDHT and put together a little Python module for using it. I think it will make a great bootstrapping service for a darknet application.

import sha
import xmlrpclib
# Other gateways listed at http://opendht.org/servers.txt. This gateway uses
# OASIS (http://oasis.coralcdn.org/) to find the nearest node.
GATEWAY = 'http://opendht.nyuld.net:5851/'
# Application ID.
APP_ID = 'PyOpenDHT'
# Response code to human-readable code mapping.
RESPONSES = {0: 'Success', 1: 'Capacity', 2: 'Again'}
# Time to live for puts and removes.
TTL = 3600
class OpenDht(object):
  def __init__(self, gateway=GATEWAY):
    self.server = xmlrpclib.ServerProxy(gateway)
  def _EncodeHash(self, value):
    return xmlrpclib.Binary(sha.new(value).digest())
  def Put(self, key, value, ttl=TTL, secret=''):
    key = self._EncodeHash(key)
    value = xmlrpclib.Binary(value)
    if secret: 
      secret = self._EncodeHash(secret)
      return self.server.put_removable(key, value, 'SHA', secret, ttl, APP_ID)
    return self.server.put(key, value, ttl, APP_ID)
  def GetDetails(self, key, max_values=1, placemark=''):
    key = self._EncodeHash(key)
    placemark = xmlrpclib.Binary(placemark)
    return self.server.get_details(key, max_values, placemark, APP_ID)
  def Get(self, key, max_values=1, placemark=''):
    key = self._EncodeHash(key)
    placemark = xmlrpclib.Binary(placemark)
    values, placemark = self.server.get(key, max_values, placemark, APP_ID)
    values = [v.data for v in values]
    placemark = placemark.data
    return values, placemark
  def GetAll(self, key, max_values=5):
    key = self._EncodeHash(key)
    values, placemark = self.Get(key, max_values)
    while not placemark:
      new_values, placemark = self.Get(key, max_values, placemark)
      values.extend(new_values)
  def Remove(self, key, value, secret, ttl=TTL):
    key = self._EncodeHash(key)
    value = self._EncodeHash(value)
    secret = self._EncodeHash(secret)
    return self.server.rm(key, value, 'SHA', secret, ttl, APP_ID)