ref: a03f0d0102b7861e90a14908bb16ed7588215cf5
parent: ec2e356ce47574f4625501686112dd75b2d96059
author: aiju <aiju@phicode.de>
date: Fri Jun 8 13:23:29 EDT 2012
more btc stuff
--- a/sys/src/cmd/btc/sign.c
+++ b/sys/src/cmd/btc/sign.c
@@ -153,6 +153,14 @@
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 @@
s += ti->sclen;
}
if(sig == i){+ varenc(ti->scoldlen, &s);
memcpy(s, ti->scold, ti->scoldlen);
s += ti->scoldlen;
}
@@ -211,10 +220,10 @@
*s++ = 0;
*s++ = 0;
if(sig != -1){+ *s++ = 1;
*s++ = 0;
*s++ = 0;
*s++ = 0;
- *s++ = 0;
}
return s - buf;
}
@@ -254,7 +263,7 @@
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 @@
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 @@
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 @@
if((i%32)==31)
print("\n");}
- if((i%16)!=0)
+ if((i%32)!=0)
print("\n");}
--- a/sys/src/libsec/port/ecc.c
+++ b/sys/src/libsec/port/ecc.c
@@ -514,6 +514,7 @@
{mpint *n, *b, *r;
char *t;
+ int l;
n = mpnew(0);
r = mpnew(0);
@@ -531,7 +532,9 @@
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);
--
⑨