ebcdic problem in bufaux.c
Markus Friedl
markus at openbsd.org
Fri Jul 23 08:17:20 EST 2004
On Thu, Jul 22, 2004 at 01:36:06PM -0700, Greg Lambert wrote:
> I am working on a port of Openssh 3.8p1 after already
> having done a port of Openssh 3.5p1. There are a
> couple of new lines in buffer_get_bignum2() that are
> causing me problems:
>
> if (len > 0 && (bin[0] & 0x80))
> fatal("buffer_get_bignum2: negative
> numbers not supported");
>
> The "& 0x80" check is not relevant in ebcdic.
>
> Does anyone know why this check was added?
because negative numbers are not supported by
our buffer_get_bignum2.
see below
> What are the consequences of removing it?
>
> Does anyone have any idea how I could get the same
> result as this check in ebcdic?
bin[] is not a character, it's just a byte.
here's a quote from the secsh-architecture draft:
mpint
Represents multiple precision integers in two's complement format,
stored as a string, 8 bits per byte, MSB first. Negative numbers
have the value 1 as the most significant bit of the first byte of
the data partition. If the most significant bit would be set for a
positive number, the number MUST be preceded by a zero byte.
Unnecessary leading bytes with the value 0 or 255 MUST NOT be
included. The value zero MUST be stored as a string with zero
bytes of data.
By convention, a number that is used in modular computations in
Z_n SHOULD be represented in the range 0 <= x < n.
Examples:
value (hex) representation (hex)
---------------------------------------------------------------
0 00 00 00 00
9a378f9b2e332a7 00 00 00 08 09 a3 78 f9 b2 e3 32 a7
80 00 00 00 02 00 80
-1234 00 00 00 02 ed cc
-deadbeef 00 00 00 05 ff 21 52 41 11
More information about the openssh-unix-dev
mailing list