1
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
3
* LibTomCrypt is a library that provides various cryptographic
4
* algorithms in a highly modular and flexible manner.
6
* The library is free for all purposes without any express
9
* Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
14
@file der_decode_printable_string.c
15
ASN.1 DER, encode a printable STRING, Tom St Denis
22
Store a printable STRING
23
@param in The DER encoded printable STRING
24
@param inlen The size of the DER printable STRING
25
@param out [out] The array of octets stored (one per char)
26
@param outlen [in/out] The number of octets stored
27
@return CRYPT_OK if successful
29
int der_decode_printable_string(const unsigned char *in, unsigned long inlen,
30
unsigned char *out, unsigned long *outlen)
32
unsigned long x, y, len;
35
LTC_ARGCHK(in != NULL);
36
LTC_ARGCHK(out != NULL);
37
LTC_ARGCHK(outlen != NULL);
39
/* must have header at least */
41
return CRYPT_INVALID_PACKET;
45
if ((in[0] & 0x1F) != 0x13) {
46
return CRYPT_INVALID_PACKET;
50
/* decode the length */
52
/* valid # of bytes in length are 1,2,3 */
54
if ((y == 0) || (y > 3) || ((x + y) > inlen)) {
55
return CRYPT_INVALID_PACKET;
58
/* read the length in */
62
len = (len << 8) | in[x++];
70
return CRYPT_BUFFER_OVERFLOW;
73
if (len + x > inlen) {
74
return CRYPT_INVALID_PACKET;
78
for (y = 0; y < len; y++) {
79
t = der_printable_value_decode(in[x++]);
81
return CRYPT_INVALID_ARG;
93
/* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/printable_string/der_decode_printable_string.c,v $ */
94
/* $Revision: 1.1 $ */
95
/* $Date: 2005/05/21 02:29:54 $ */