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