xref: /freebsd/crypto/heimdal/lib/hx509/quote.py (revision ca987d4641cdcd7f27e153db17c5bf064934faf5)
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3#
4# Copyright (c) 2010 Kungliga Tekniska Högskolan
5# (Royal Institute of Technology, Stockholm, Sweden).
6# All rights reserved.
7#
8# Redistribution and use in source and binary forms, with or without
9# modification, are permitted provided that the following conditions
10# are met:
11#
12# 1. Redistributions of source code must retain the above copyright
13#    notice, this list of conditions and the following disclaimer.
14#
15# 2. Redistributions in binary form must reproduce the above copyright
16#    notice, this list of conditions and the following disclaimer in the
17#    documentation and/or other materials provided with the distribution.
18#
19# 3. Neither the name of the Institute nor the names of its contributors
20#    may be used to endorse or promote products derived from this software
21#    without specific prior written permission.
22#
23# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26# ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33# SUCH DAMAGE.
34#
35
36CONTROL_CHAR = 1
37PRINTABLE = 2
38RFC2253_QUOTE_FIRST = 4
39RFC2253_QUOTE_LAST = 8
40RFC2253_QUOTE = 16
41RFC2253_HEX = 32
42
43chars = []
44
45for i in range(0, 256):
46    chars.append(0);
47
48for i in range(0, 256):
49    if (i < 32 or i > 126):
50        chars[i] |= CONTROL_CHAR | RFC2253_HEX;
51
52for i in range(ord("A"), ord("Z") + 1):
53    chars[i] |= PRINTABLE
54for i in range(ord("a"), ord("z") + 1):
55    chars[i] |= PRINTABLE
56for i in range(ord("0"), ord("9") + 1):
57    chars[i] |= PRINTABLE
58
59chars[ord(' ')] |= PRINTABLE
60chars[ord('+')] |= PRINTABLE
61chars[ord(',')] |= PRINTABLE
62chars[ord('-')] |= PRINTABLE
63chars[ord('.')] |= PRINTABLE
64chars[ord('/')] |= PRINTABLE
65chars[ord(':')] |= PRINTABLE
66chars[ord('=')] |= PRINTABLE
67chars[ord('?')] |= PRINTABLE
68
69chars[ord(' ')] |= RFC2253_QUOTE_FIRST | RFC2253_QUOTE_FIRST
70
71chars[ord(',')] |= RFC2253_QUOTE
72chars[ord('=')] |= RFC2253_QUOTE
73chars[ord('+')] |= RFC2253_QUOTE
74chars[ord('<')] |= RFC2253_QUOTE
75chars[ord('>')] |= RFC2253_QUOTE
76chars[ord('#')] |= RFC2253_QUOTE
77chars[ord(';')] |= RFC2253_QUOTE
78
79print "#define Q_CONTROL_CHAR		1"
80print "#define Q_PRINTABLE		2"
81print "#define Q_RFC2253_QUOTE_FIRST	4"
82print "#define Q_RFC2253_QUOTE_LAST	8"
83print "#define Q_RFC2253_QUOTE		16"
84print "#define Q_RFC2253_HEX		32"
85print ""
86print "#define Q_RFC2253		(Q_RFC2253_QUOTE_FIRST|Q_RFC2253_QUOTE_LAST|Q_RFC2253_QUOTE|Q_RFC2253_HEX)"
87print "\n" * 2
88
89
90
91
92print "unsigned char char_map[] = {\n\t",
93for x in range(0, 256):
94    if (x % 8) == 0 and x != 0:
95        print "\n\t",
96    print "0x%(char)02x" % { 'char' : chars[x] },
97    if x < 255:
98        print ", ",
99    else:
100        print ""
101print "};"
102