[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