old_contents: /*
   * Id is an object representation of a peer Id. a peer Id is a multihash
   */
  
  var multihashing = require('multihashing')
  var base58 = require('bs58')
  var crypto = require('crypto')
  
  exports = module.exports = Id
  
  function Id (id, pubKey, privKey) {
    var self = this
  
    if (!(self instanceof Id)) {
      throw new Error('Id must be called with new')
    }
  
    self.privKey = privKey
    self.pubKey = pubKey
    self.id = id // multihash - sha256 - buffer
  
    // pretty print
  
    self.toPrint = function () {
      return {
        id: id.toHexString(),
        privKey: privKey.toString('hex'),
        pubKey: pubKey.toString('hex')
      }
    }
  
    // encode/decode functions
  
    self.toHexString = function () {
      return self.id.toString('hex')
    }
  
    self.toBytes = function () {
      return self.id
    }
  
    self.toB58String = function () {
      return base58.encode(self.id)
    }
  
  }
  
  // generation
  
  exports.create = function () {
    var ecdh = crypto.createECDH('secp256k1')
    ecdh.generateKeys()
  
    var mhId = multihashing(ecdh.getPublicKey(), 'sha2-256')
  
    return new Id(mhId, ecdh.getPrivateKey(), ecdh.getPublicKey())
  }
  
  exports.createFromHexString = function (str) {
    return new Id(new Buffer(str), 'hex')
  }
  
  exports.createFromBytes = function (buf) {
    return new Id(buf)
  }
  
  exports.createFromB58String = function (str) {
    return new Id(new Buffer(base58.decode(str)))
  }
  
  exports.createFromPubKey = function (pubKey) {
    var mhId = multihashing(pubKey, 'sha2-256')
  
    return new Id(mhId, null, pubKey)
  }
  
  exports.createFromPrivKey = function () {
    // TODO(daviddias) derive PubKey from priv
  }
  
new_contents: /*
   * Id is an object representation of a peer Id. a peer Id is a multihash
   */
  
  var multihashing = require('multihashing')
  var base58 = require('bs58')
  var crypto = require('crypto')
  
  exports = module.exports = Id
  
  function Id (id, privKey, pubKey) {
    var self = this
  
    if (!(self instanceof Id)) {
      throw new Error('Id must be called with new')
    }
  
    self.privKey = privKey
    self.pubKey = pubKey
    self.id = id // multihash - sha256 - buffer
  
    // pretty print
  
    self.toPrint = function () {
      return {
        id: id.toHexString(),
        privKey: privKey.toString('hex'),
        pubKey: pubKey.toString('hex')
      }
    }
  
    // encode/decode functions
  
    self.toHexString = function () {
      return self.id.toString('hex')
    }
  
    self.toBytes = function () {
      return self.id
    }
  
    self.toB58String = function () {
      return base58.encode(self.id)
    }
  
  }
  
  // generation
  
  exports.create = function () {
    var ecdh = crypto.createECDH('secp256k1')
    ecdh.generateKeys()
  
    var mhId = multihashing(ecdh.getPublicKey(), 'sha2-256')
  
    return new Id(mhId, ecdh.getPrivateKey(), ecdh.getPublicKey())
  }
  
  exports.createFromHexString = function (str) {
    return new Id(new Buffer(str), 'hex')
  }
  
  exports.createFromBytes = function (buf) {
    return new Id(buf)
  }
  
  exports.createFromB58String = function (str) {
    return new Id(new Buffer(base58.decode(str)))
  }
  
  exports.createFromPubKey = function (pubKey) {
    var mhId = multihashing(pubKey, 'sha2-256')
    return new Id(mhId, null, pubKey)
  }
  
  exports.createFromPrivKey = function () {
    // TODO(daviddias) derive PubKey from priv
  }
  
subject: fix args order