static int test_one_int(int val) { int ret, dval; unsigned char *buf; size_t len_len, len; len = _heim_len_int(val); buf = emalloc(len + 2); buf[0] = '\xff'; buf[len + 1] = '\xff'; memset(buf + 1, 0, len); ret = der_put_integer(buf + 1 + len - 1, len, &val, &len_len); if (ret) { printf("integer %d encode failed %d\n", val, ret); return 1; } if (len != len_len) { printf("integer %d encode fail with %d len %lu, result len %lu\n", val, ret, (unsigned long)len, (unsigned long)len_len); return 1; } ret = der_get_integer(buf + 1, len, &dval, &len_len); if (ret) { printf("integer %d decode failed %d\n", val, ret); return 1; } if (len != len_len) { printf("integer %d decoded diffrent len %lu != %lu", val, (unsigned long)len, (unsigned long)len_len); return 1; } if (val != dval) { printf("decode decoded to diffrent value %d != %d", val, dval); return 1; } if (buf[0] != (unsigned char)'\xff') { printf("precanary dead %d\n", val); return 1; } if (buf[len + 1] != (unsigned char)'\xff') { printf("postecanary dead %d\n", val); return 1; } free(buf); return 0; }
size_t der_length_enumerated (const unsigned *data) { return _heim_len_int (*data); }
size_t der_length_integer (const int *data) { return _heim_len_int (*data); }