git: 9front

Download patch

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);
--