def encode(self, encoding=None): r"""Encode into a multihash-encoded digest. If `encoding` is `None`, a binary digest is produced: >>> mh = Multihash(0x01, b'TEST') >>> mh.encode() b'\x01\x04TEST' If the name of an `encoding` is specified, it is used to encode the binary digest before returning it (see `CodecReg` for supported codecs). >>> mh.encode('base64') b'AQRURVNU' If the `encoding` is not available, a `KeyError` is raised. """ try: fc = self.func.value except AttributeError: # application-specific function code fc = self.func mhash = bytes([fc, len(self.digest)]) + self.digest if encoding: mhash = CodecReg.get_encoder(encoding)(mhash) return mhash
def encode(self, encoding=None): r"""Encode into a multihash-encoded digest. If `encoding` is `None`, a binary digest is produced: >>> mh = Multihash(0x01, b'TEST') >>> mh.encode() b'\x01\x04TEST' If the name of an `encoding` is specified, it is used to encode the binary digest before returning it (see `CodecReg` for supported codecs). >>> mh.encode('base64') b'AQRURVNU' If the `encoding` is not available, a `KeyError` is raised. """ try: fc = self.func.value except AttributeError: # application-specific function code fc = self.func mhash = fc.to_bytes((fc.bit_length() + 7) // 8, 'big') + bytes([len(self.digest)]) + self.digest if encoding: mhash = CodecReg.get_encoder(encoding)(mhash) return mhash