Commit 958d7a80 authored by Lev Walkin's avatar Lev Walkin

BOOLEAN and NULL have changed their types

parent 7f7d46ac
...@@ -30,16 +30,16 @@ asn1_TYPE_descriptor_t asn1_DEF_BOOLEAN = { ...@@ -30,16 +30,16 @@ asn1_TYPE_descriptor_t asn1_DEF_BOOLEAN = {
*/ */
ber_dec_rval_t ber_dec_rval_t
BOOLEAN_decode_ber(asn1_TYPE_descriptor_t *td, BOOLEAN_decode_ber(asn1_TYPE_descriptor_t *td,
void **bool_structure, void *buf_ptr, size_t size, void **bool_value, void *buf_ptr, size_t size,
int tag_mode) { int tag_mode) {
BOOLEAN_t *st = (BOOLEAN_t *)*bool_structure; BOOLEAN_t *st = (BOOLEAN_t *)*bool_value;
ber_dec_rval_t rval; ber_dec_rval_t rval;
ber_dec_ctx_t ctx = { 0, 0, 0, 0 }; ber_dec_ctx_t ctx = { 0, 0, 0, 0 };
ber_tlv_len_t length; ber_tlv_len_t length;
ber_tlv_len_t lidx; ber_tlv_len_t lidx;
if(st == NULL) { if(st == NULL) {
(void *)st = *bool_structure = CALLOC(1, sizeof(*st)); (void *)st = *bool_value = CALLOC(1, sizeof(*st));
if(st == NULL) { if(st == NULL) {
rval.code = RC_FAIL; rval.code = RC_FAIL;
rval.consumed = 0; rval.consumed = 0;
...@@ -71,22 +71,22 @@ BOOLEAN_decode_ber(asn1_TYPE_descriptor_t *td, ...@@ -71,22 +71,22 @@ BOOLEAN_decode_ber(asn1_TYPE_descriptor_t *td,
/* /*
* Compute boolean value. * Compute boolean value.
*/ */
for(st->value = 0, lidx = 0; for(*st = 0, lidx = 0;
(lidx < length) && st->value == 0; lidx++) { (lidx < length) && *st == 0; lidx++) {
/* /*
* Very simple approach: read bytes until the end or * Very simple approach: read bytes until the end or
* value is already TRUE. * value is already TRUE.
* BOOLEAN is not supposed to contain meaningful data anyway. * BOOLEAN is not supposed to contain meaningful data anyway.
*/ */
st->value |= ((uint8_t *)buf_ptr)[lidx]; *st |= ((uint8_t *)buf_ptr)[lidx];
} }
rval.code = RC_OK; rval.code = RC_OK;
rval.consumed += length; rval.consumed += length;
ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%ld", ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d",
(long)rval.consumed, (long)length, (long)rval.consumed, (long)length,
td->name, (long)st->value); td->name, *st);
return rval; return rval;
} }
...@@ -109,7 +109,7 @@ BOOLEAN_encode_der(asn1_TYPE_descriptor_t *td, void *sptr, ...@@ -109,7 +109,7 @@ BOOLEAN_encode_der(asn1_TYPE_descriptor_t *td, void *sptr,
uint8_t bool_value; uint8_t bool_value;
ssize_t ret; ssize_t ret;
bool_value = st->value?0xff:0; /* 0xff mandated by DER */ bool_value = *st?0xff:0; /* 0xff mandated by DER */
ret = cb(&bool_value, 1, app_key); ret = cb(&bool_value, 1, app_key);
if(ret == -1) { if(ret == -1) {
erval.encoded = -1; erval.encoded = -1;
...@@ -133,7 +133,7 @@ BOOLEAN_print(asn1_TYPE_descriptor_t *td, const void *sptr, int ilevel, ...@@ -133,7 +133,7 @@ BOOLEAN_print(asn1_TYPE_descriptor_t *td, const void *sptr, int ilevel,
(void)ilevel; /* Unused argument */ (void)ilevel; /* Unused argument */
if(st) { if(st) {
if(st->value) if(*st)
return cb("TRUE", 4, app_key); return cb("TRUE", 4, app_key);
else else
return cb("FALSE", 5, app_key); return cb("FALSE", 5, app_key);
......
...@@ -7,9 +7,12 @@ ...@@ -7,9 +7,12 @@
#include <constr_TYPE.h> #include <constr_TYPE.h>
typedef struct BOOLEAN { /*
int value; * The underlying integer may contain various values, but everything
} BOOLEAN_t; * non-zero is capped to 0xff by the DER encoder. The BER decoder may
* yield non-zero values different from 1, beware.
*/
typedef int BOOLEAN_t;
extern asn1_TYPE_descriptor_t asn1_DEF_BOOLEAN; extern asn1_TYPE_descriptor_t asn1_DEF_BOOLEAN;
......
...@@ -2,18 +2,20 @@ ...@@ -2,18 +2,20 @@
* Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved. * Copyright (c) 2003 Lev Walkin <vlm@lionet.info>. All rights reserved.
* Redistribution and modifications are permitted subject to BSD license. * Redistribution and modifications are permitted subject to BSD license.
*/ */
#ifndef _NULL_H_ #ifndef ASN_TYPE_NULL_H
#define _NULL_H_ #define ASN_TYPE_NULL_H
#include <constr_TYPE.h> #include <constr_TYPE.h>
typedef struct NULL_s { /*
int value; * The value of the NULL type is meaningless: see BOOLEAN if you want to
} NULL_t; * carry true/false semantics.
*/
typedef int NULL_t;
extern asn1_TYPE_descriptor_t asn1_DEF_NULL; extern asn1_TYPE_descriptor_t asn1_DEF_NULL;
der_type_encoder_f NULL_encode_der; der_type_encoder_f NULL_encode_der;
asn_struct_print_f NULL_print; asn_struct_print_f NULL_print;
#endif /* _NULL_H_ */ #endif /* NULL_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment