~mdw
/
sgt
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Extra diagnostics in the hope that we can track down the problem with
[sgt/putty]
/
sshbn.c
diff --git
a/sshbn.c
b/sshbn.c
index
587fc8f
..
2fd98f9
100644
(file)
--- a/
sshbn.c
+++ b/
sshbn.c
@@
-6,6
+6,14
@@
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
+#if 0 // use PuTTY main debugging for diagbn()
+#include <windows.h>
+#include "putty.h"
+#define debugprint debug
+#else
+#define debugprint(x) printf x
+#endif
+
#define BIGNUM_INTERNAL
typedef unsigned short *Bignum;
#define BIGNUM_INTERNAL
typedef unsigned short *Bignum;
@@
-60,7
+68,7
@@
void freebn(Bignum b) {
}
Bignum bn_power_2(int n) {
}
Bignum bn_power_2(int n) {
- Bignum ret = newbn(
(n+15)/16
);
+ Bignum ret = newbn(
n/16+1
);
bignum_set_bit(ret, n, 1);
return ret;
}
bignum_set_bit(ret, n, 1);
return ret;
}
@@
-470,7
+478,7
@@
int ssh1_read_bignum(unsigned char *data, Bignum *result) {
/*
* Return the bit count of a bignum, for ssh1 encoding.
*/
/*
* Return the bit count of a bignum, for ssh1 encoding.
*/
-int
ssh1_
bignum_bitcount(Bignum bn) {
+int bignum_bitcount(Bignum bn) {
int bitcount = bn[0] * 16 - 1;
while (bitcount >= 0 && (bn[bitcount/16+1] >> (bitcount % 16)) == 0)
bitcount--;
int bitcount = bn[0] * 16 - 1;
while (bitcount >= 0 && (bn[bitcount/16+1] >> (bitcount % 16)) == 0)
bitcount--;
@@
-481,7
+489,14
@@
int ssh1_bignum_bitcount(Bignum bn) {
* Return the byte length of a bignum when ssh1 encoded.
*/
int ssh1_bignum_length(Bignum bn) {
* Return the byte length of a bignum when ssh1 encoded.
*/
int ssh1_bignum_length(Bignum bn) {
- return 2 + (ssh1_bignum_bitcount(bn)+7)/8;
+ return 2 + (bignum_bitcount(bn)+7)/8;
+}
+
+/*
+ * Return the byte length of a bignum when ssh2 encoded.
+ */
+int ssh2_bignum_length(Bignum bn) {
+ return 4 + (bignum_bitcount(bn)+8)/8;
}
/*
}
/*
@@
-530,7
+545,7
@@
int ssh1_write_bignum(void *data, Bignum bn) {
unsigned char *p = data;
int len = ssh1_bignum_length(bn);
int i;
unsigned char *p = data;
int len = ssh1_bignum_length(bn);
int i;
- int bitc =
ssh1_
bignum_bitcount(bn);
+ int bitc = bignum_bitcount(bn);
*p++ = (bitc >> 8) & 0xFF;
*p++ = (bitc ) & 0xFF;
*p++ = (bitc >> 8) & 0xFF;
*p++ = (bitc ) & 0xFF;
@@
-563,7
+578,7
@@
Bignum bignum_rshift(Bignum a, int shift) {
int i, shiftw, shiftb, shiftbb, bits;
unsigned short ai, ai1;
int i, shiftw, shiftb, shiftbb, bits;
unsigned short ai, ai1;
- bits =
ssh1_
bignum_bitcount(a) - shift;
+ bits = bignum_bitcount(a) - shift;
ret = newbn((bits+15)/16);
if (ret) {
ret = newbn((bits+15)/16);
if (ret) {
@@
-714,15
+729,15
@@
void diagbn(char *prefix, Bignum md) {
int i, nibbles, morenibbles;
static const char hex[] = "0123456789ABCDEF";
int i, nibbles, morenibbles;
static const char hex[] = "0123456789ABCDEF";
-
printf("%s0x", prefix ? prefix : ""
);
+
debugprint(("%s0x", prefix ? prefix : "")
);
- nibbles = (3 +
ssh1_
bignum_bitcount(md))/4; if (nibbles<1) nibbles=1;
+ nibbles = (3 + bignum_bitcount(md))/4; if (nibbles<1) nibbles=1;
morenibbles = 4*md[0] - nibbles;
morenibbles = 4*md[0] - nibbles;
- for (i=0; i<morenibbles; i++)
putchar('-'
);
+ for (i=0; i<morenibbles; i++)
debugprint(("-")
);
for (i=nibbles; i-- ;)
for (i=nibbles; i-- ;)
-
putchar(hex[(bignum_byte(md, i/2) >> (4*(i%2))) & 0xF]
);
+
debugprint(("%c",hex[(bignum_byte(md, i/2) >> (4*(i%2))) & 0xF])
);
- if (prefix)
putchar('\n'
);
+ if (prefix)
debugprint(("\n")
);
}
/*
}
/*
@@
-827,7
+842,7
@@
char *bignum_decimal(Bignum x) {
* Therefore if we multiply the bit count by 28/93, rounding
* up, we will have enough digits.
*/
* Therefore if we multiply the bit count by 28/93, rounding
* up, we will have enough digits.
*/
- i =
ssh1_
bignum_bitcount(x);
+ i = bignum_bitcount(x);
ndigits = (28*i + 92)/93; /* multiply by 28/93 and round up */
ndigits++; /* allow for trailing \0 */
ret = smalloc(ndigits);
ndigits = (28*i + 92)/93; /* multiply by 28/93 and round up */
ndigits++; /* allow for trailing \0 */
ret = smalloc(ndigits);