From: Pekka Riikonen Date: Tue, 23 Jan 2007 14:52:52 +0000 (+0000) Subject: Changed SILC_ASN1_OCTET_STRING to plain binary data. X-Git-Tag: silc.client.1.1.beta1~48 X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=commitdiff_plain;h=d3342e968cc12587121b96d83fb4fda83f1a181f Changed SILC_ASN1_OCTET_STRING to plain binary data. --- diff --git a/lib/silcasn1/silcasn1.h b/lib/silcasn1/silcasn1.h index 51a7015c..df5bde14 100644 --- a/lib/silcasn1/silcasn1.h +++ b/lib/silcasn1/silcasn1.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 2003 - 2006 Pekka Riikonen + Copyright (C) 2003 - 2007 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -666,7 +666,7 @@ SilcBool silc_asn1_decode(SilcAsn1 asn1, SilcBuffer src, ...); * * DESCRIPTION * - * Macro used to encode or decode boolean value. Type boolean type + * Macro used to encode or decode boolean value. The boolean type * is SilcBool. * * The `opts' is SilcAsn1Options. The `tag' is a tag number. @@ -829,16 +829,11 @@ SilcBool silc_asn1_decode(SilcAsn1 asn1, SilcBuffer src, ...); * DESCRIPTION * * Macro used to encode or decode octet string. The string type is - * unsigned char and string length SilcUInt32. + * unsigned char and string length SilcUInt32. Octet string is + * considered to be 8-bit unsigned binary data. * * The `opts' is SilcAsn1Options. The `tag' is a tag number. * - * NOTES - * - * The string must be in UTF-8 encoding when encoding. The decoded - * string will be in UTF-8 encoding. The actual data is encoded to - * or decoded from 8-bit ASCII. - * ***/ #define SILC_ASN1_OCTET_STRING(x, xl) SILC_ASN1_U2(OCTET_STRING, x, xl) #define SILC_ASN1_OCTET_STRING_T(o, t, x, xl) SILC_ASN1_T2(OCTET_STRING, o, t, x, xl) diff --git a/lib/silcasn1/silcasn1_decode.c b/lib/silcasn1/silcasn1_decode.c index 911515b2..ad5fe79e 100644 --- a/lib/silcasn1/silcasn1_decode.c +++ b/lib/silcasn1/silcasn1_decode.c @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 2003 - 2006 Pekka Riikonen + Copyright (C) 2003 - 2007 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -665,9 +665,10 @@ silc_asn1_decoder(SilcAsn1 asn1, SilcStack stack1, SilcAsn1Tag type, case SILC_ASN1_TAG_OCTET_STRING: { - /* Octet string. We take it as 8-bit ASCII */ + /* Octet string. Take data as is. */ SILC_ASN1_VAD_UCHAR(asn1, opts, unsigned char, s, s_len); - SILC_ASN1_DECODE_STRING(SILC_STRING_ASCII, s, s_len); + *s = silc_smemdup(stack1, rdata, rdata_len); + *s_len = rdata_len; break; } diff --git a/lib/silcasn1/silcasn1_encode.c b/lib/silcasn1/silcasn1_encode.c index 0245185f..f4937390 100644 --- a/lib/silcasn1/silcasn1_encode.c +++ b/lib/silcasn1/silcasn1_encode.c @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 2003 - 2006 Pekka Riikonen + Copyright (C) 2003 - 2007 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -555,8 +555,17 @@ silc_asn1_encoder(SilcAsn1 asn1, SilcStack stack1, SilcStack stack2, case SILC_ASN1_TAG_OCTET_STRING: { - /* Octet string. We put it in as 8-bit ASCII */ - SILC_ASN1_ENCODE_STRING(SILC_STRING_ASCII); + /* Octet string. Put data as is. */ + unsigned char *d = va_arg(asn1->ap, unsigned char *); + SilcUInt32 d_len = va_arg(asn1->ap, SilcUInt32); + + len = silc_ber_encoded_len(tag, d_len, indef); + dest = silc_buffer_srealloc_size(stack1, dest, + silc_buffer_truelen(dest) + len); + ret = silc_ber_encode(dest, ber_class, SILC_BER_ENC_PRIMITIVE, + tag, d, d_len, indef); + if (!ret) + goto fail; break; } diff --git a/lib/silcasn1/tests/test_silcasn1.c b/lib/silcasn1/tests/test_silcasn1.c index 2f2ec76c..74bd8c80 100644 --- a/lib/silcasn1/tests/test_silcasn1.c +++ b/lib/silcasn1/tests/test_silcasn1.c @@ -742,10 +742,13 @@ int main(int argc, char **argv) SILC_LOG_DEBUG(("Decoding success")); printf("\n"); - -#endif +#endif /* 1 */ silc_asn1_free(asn1); + success = TRUE; out: - exit(success); + SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE")); + fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE"); + + return success; }