hi, what are the rules or known-good examples of negative number encoding? I'm trying to encode -2 as part of currency-amount-power sequence and Peter Gutmann's dumpasn1 tool shows it as -254.
Any problem regarding negative number handling at the code attached?
Hope it's good enough to drive debugger
thank you,
Vadim
0 30 11: SEQUENCE {
2 02 2: INTEGER 840
6 02 2: INTEGER 735
10 02 1: INTEGER -254
: Warning: Integer has a negative value
: }
/* ASN.1 handling code (c) Vadim Fedukovich 2001
* work-in-progress; please use for bug hunting only
*/
#include <stdio.h>
#include <openssl/asn1t.h>
typedef enum {CURRENCY_USD=840} CurrencyCode;
struct set_CurrencyAmount_st {
ASN1_INTEGER *code;
ASN1_INTEGER *amount;
ASN1_INTEGER *power;
};
typedef struct set_CurrencyAmount_st SET_CurrencyAmount;
ASN1_SEQUENCE(SET_CurrencyAmount) = {
ASN1_SIMPLE(SET_CurrencyAmount, code, ASN1_INTEGER),
ASN1_SIMPLE(SET_CurrencyAmount, amount, ASN1_INTEGER),
ASN1_SIMPLE(SET_CurrencyAmount, power, ASN1_INTEGER)
} ASN1_SEQUENCE_END(SET_CurrencyAmount)
IMPLEMENT_ASN1_FUNCTIONS(SET_CurrencyAmount)
#define SZ 2048
int main() {
SET_CurrencyAmount *amt;
int sz, amount = 735; // 7 dollars 35 cents, power -2
unsigned char buff[SZ], *pp;
amt = SET_CurrencyAmount_new();
ASN1_INTEGER_set(amt->code, (long)CURRENCY_USD);
ASN1_INTEGER_set(amt->amount, (long)amount);
ASN1_INTEGER_set(amt->power, -2L);
pp = buff;
sz = i2d_SET_CurrencyAmount(amt, &pp);
fwrite(buff, sz, 1, stderr);
return 0;
}
amt
Description: Binary data
