[Pettycoin-dev] PATCH: Generalize raw_decode_base58 adding raw_decode_base_n

Nelson Castillo nelsoneci at gmail.com
Mon Aug 11 03:31:26 EST 2014


On Sun, Aug 10, 2014 at 6:41 AM, Rusty Russell <rusty at rustcorp.com.au>
wrote:

> Hi, sorry for the delayed response!
>
> Minor feedback below.
>
> First, I generally prefer patches inline (git am can do this for you),
> so I can directly quote them.  Also mailman seems to eat your
> attachments, so they didn't reach the archive.
>
> Second, I've added a Signed-off-by: requirement a-la Linux kernel.  I've
> had lawyers tell me it's important in the past, and maybe they're right.
>

Hi there.

I don't have my current environment configured for Linux-kernel-like
patches, I'll configure it and resend with the observations.


>
> > commit d9a7fd88ae802d5ca8d4aad6e57ad0f09dd8ab8e
> > Author: Nelson Castillo <nelsoneci at gmail.com>
> > Date:   Wed Aug 6 04:28:06 2014 -0400
> >
> >     Generalize raw_decode_base58 adding raw_decode_base_n
> >
> >     This will make this function useful for other bases.
> >
> >     I was trying to make code to import from a raw hex bitcoin key.
> >     I do not know if this (raw hex import) makes sense for Pettycoin.
> >
> > diff --git a/base58.c b/base58.c
> > index da4a17d..5093b77 100644
> > --- a/base58.c
> > +++ b/base58.c
> > @@ -12,16 +12,17 @@
> >  #include <openssl/sha.h>
> >  #include <string.h>
> >
> > -static const char enc[] =
> > +static const char enc_16[] = "0123456789abcdef";
> > +static const char enc_58[] =
> >       "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
> >
> > -static char encode_char(unsigned long val)
> > +static char encode_char(unsigned long val, const char *enc)
> >  {
> >       assert(val < strlen(enc));
> >       return enc[val];
> >  }
> >
> > -static int decode_char(char c)
> > +static int decode_char(char c, const char *enc)
> >  {
> >       const char *pos = strchr(enc, c);
> >       if (!pos)
> > @@ -58,7 +59,7 @@ static char *encode_base58(char *buf, size_t buflen,
> >                       p = NULL;
> >                       goto out;
> >               }
> > -             *p = encode_char(rem);
> > +             *p = encode_char(rem, enc_58);
> >       }
> >
> >       /* Now, this is really weird.  We pad with zeroes, but not at
> > @@ -69,7 +70,7 @@ static char *encode_base58(char *buf, size_t buflen,
> >                       p = NULL;
> >                       goto out;
> >               }
> > -             *p = encode_char(0);
> > +             *p = encode_char(0, enc_58);
> >               data_len--;
> >               data++;
> >       }
> > @@ -80,20 +81,36 @@ out:
> >  }
> >
> >  /*
> > - * Decode a base58-encoded string into a byte sequence.
> > + * Decode a base_n-encoded string into a byte sequence.
> >   */
> > -bool raw_decode_base58(BIGNUM *bn, const char *src, size_t len)
> > +bool raw_decode_base_n(BIGNUM *bn, const char *src, size_t len, int
> base)
> >  {
> > +     const char *enc;
> >       BN_init(bn);
> >       BN_zero(bn);
> >
> > +     assert(base == 16 || base == 58);
> > +     switch (base) {
> > +     case 16:
> > +             enc = enc_16;
> > +             break;
> > +     case 58:
> > +             enc = enc_58;
> > +             break;
> > +     default:
> > +             abort();
>
> Doesn't need both assert() and abort() :)
>

Yeah.


> And given your comment in your test, you might want to have the caller
> do the BN_init()?
>

Yes. I think that's better.

Thanks.


>
> Cheers,
> Rusty.
> _______________________________________________
> Pettycoin-dev mailing list
> Pettycoin-dev at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/pettycoin-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/pettycoin-dev/attachments/20140810/74261735/attachment.html>


More information about the Pettycoin-dev mailing list