and added files
[bcm963xx.git] / userapps / opensource / ipsec-tools / src / racoon / prsa_tok.l
1 /* $Id: prsa_tok.l,v 1.2 2004/07/12 20:43:51 ludvigm Exp $ */
2
3 %{
4 /*
5  * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
6  * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  * 3. Neither the name of the project nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  */
33
34 /* This file contains a tokeniser for FreeS/WAN-style ipsec.secrets RSA keys. */
35
36 #include <string.h>
37 #include <openssl/bn.h>
38 #include <openssl/rsa.h>
39 #include "prsa_par.h"
40
41 extern int prsalex (void);
42 extern int prsa_cur_lineno;
43
44 %}
45
46 comment         \#.*
47 digit           [0-9]
48 octet           (([01]?{digit}?{digit})|((2([0-4]{digit}))|(25[0-5])))
49 addr4           {octet}\.{octet}\.{octet}\.{octet}
50 hex             [0-9a-fA-F]
51 word6           {hex}{0,4}
52 base64          [A-Za-z0-9+/=]
53 addr6           (::({word6}|{addr4})?|({word6}:)+:?({word6}|{addr4})?)
54 %%
55 \{              { return OBRACE; }
56 \}              { return EBRACE; }
57 :               { return COLON; }
58 RSA             { return TAG_RSA; }
59 PSK             { return TAG_PSK; }
60 PUB             { return TAG_PUB; }
61 0x[0-9a-fA-F]+  { 
62                         BIGNUM *bn = BN_new();
63                         BN_hex2bn(&bn, prsatext+2);
64                         prsalval.bn = bn;
65                         return HEX;
66                 }
67 0s{base64}+     {
68                         prsalval.chr = strdup(prsatext);
69                         return BASE64;
70                 }
71 Modulus         { return MODULUS; }
72 PublicExponent  { return PUBLIC_EXPONENT; }
73 PrivateExponent { return PRIVATE_EXPONENT; }
74 Prime1          { return PRIME1; }
75 Prime2          { return PRIME2; }
76 Exponent1       { return EXPONENT1; }
77 Exponent2       { return EXPONENT2; }
78 Coefficient     { return COEFFICIENT; }
79 \/              { return SLASH; }
80 {digit}+        { prsalval.num = atol(prsatext); return NUMBER; }
81 any             { return ADDRANY; }
82 {addr4}         { prsalval.chr = strdup(prsatext); return ADDR4; }
83 {addr6}         { prsalval.chr = strdup(prsatext); return ADDR6; }
84 [ \t]*          ;
85 \n              { prsa_cur_lineno++; }
86 \#.*            ;
87 %%