diff --git a/sys/src/cmd/btc/sign.c b/sys/src/cmd/btc/sign.c index 09ff86651..8366c8afe 100644 --- a/sys/src/cmd/btc/sign.c +++ b/sys/src/cmd/btc/sign.c @@ -153,6 +153,14 @@ doscript(char **args, int n, uchar *script, int *len, TxIn *ti) free(b); continue; } + if(args[i][0] == '['){ + k = strtol(args[i] + 1, &s, 0); + b = mallocz(k, 1); + hexdec(s+1, b, k); + pushdat(&scr, b, k); + free(b); + continue; + } sysfatal("invalid word %s", args[i]); next: ; } @@ -183,6 +191,7 @@ serialize(uchar *buf, int sig) s += ti->sclen; } if(sig == i){ + varenc(ti->scoldlen, &s); memcpy(s, ti->scold, ti->scoldlen); s += ti->scoldlen; } @@ -211,7 +220,7 @@ serialize(uchar *buf, int sig) *s++ = 0; *s++ = 0; if(sig != -1){ - *s++ = 0; + *s++ = 1; *s++ = 0; *s++ = 0; *s++ = 0; @@ -254,7 +263,7 @@ main() TxIn *ti; Sig *si; uchar hash[32]; - uchar sig[100]; + uchar sig[100], c; afd = open("/mnt/factotum/rpc", ORDWR); if(afd < 0) @@ -276,6 +285,11 @@ main() if(tokenize(line, args, nelem(args)) != 2) sysfatal("line %d: invalid data", linenum); hexdec(args[0], ti->prev, 32); + for(n = 0; n < 16; n++){ + c = ti->prev[n]; + ti->prev[n] = ti->prev[31-n]; + ti->prev[31-n] = c; + } i = atoi(args[1]); ti->prev[32] = i; ti->prev[33] = i >> 8; @@ -314,8 +328,8 @@ main() sha2_256(hash, 32, hash, nil); for(si = ti->sig; si != nil; si = si->n){ sign(hash, ti->sig->priv, sig + 1, &n); - print("%d\n", n); - sig[0] = n++; + sig[0] = ++n; + sig[n++] = 1; memmove(ti->sc + si->loc + n, ti->sc + si->loc, ti->sclen - si->loc); memmove(ti->sc + si->loc, sig, n); ti->sclen += n; @@ -329,7 +343,7 @@ main() if((i%32)==31) print("\n"); } - if((i%16)!=0) + if((i%32)!=0) print("\n"); } diff --git a/sys/src/libsec/port/ecc.c b/sys/src/libsec/port/ecc.c index 27e647d46..2504c7c5c 100644 --- a/sys/src/libsec/port/ecc.c +++ b/sys/src/libsec/port/ecc.c @@ -514,6 +514,7 @@ base58dec(char *src, uchar *dst, int len) { mpint *n, *b, *r; char *t; + int l; n = mpnew(0); r = mpnew(0); @@ -531,7 +532,9 @@ base58dec(char *src, uchar *dst, int len) mpmul(n, b, n); mpadd(n, r, n); } - mptobe(n, dst, len, nil); + memset(dst, 0, len); + l = (mpsignif(n) + 7) / 8; + mptobe(n, dst + (len - l), l, nil); mpfree(n); mpfree(r); mpfree(b);