/* $NetBSD: prsa_tok.l,v 1.4 2006/09/09 16:22:10 manu Exp $ */ /* Id: prsa_tok.l,v 1.2 2004/07/12 20:43:51 ludvigm Exp */ %{ /* * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany. * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* This file contains a tokeniser for FreeS/WAN-style ipsec.secrets RSA keys. */ #include <string.h> #include <openssl/bn.h> #include <openssl/rsa.h> #include "prsa_par.h" extern int prsalex (void); extern int prsa_cur_lineno; %} comment \#.* digit [0-9] octet (([01]?{digit}?{digit})|((2([0-4]{digit}))|(25[0-5]))) addr4 {octet}\.{octet}\.{octet}\.{octet} hex [0-9a-fA-F] word6 {hex}{0,4} base64 [A-Za-z0-9+/=] addr6 (::({word6}|{addr4})?|({word6}:)+:?({word6}|{addr4})?) %% \{ { return OBRACE; } \} { return EBRACE; } : { return COLON; } RSA { return TAG_RSA; } PSK { return TAG_PSK; } PUB { return TAG_PUB; } 0x[0-9a-fA-F]+ { BIGNUM *bn = BN_new(); BN_hex2bn(&bn, prsatext+2); prsalval.bn = bn; return HEX; } 0s{base64}+ { prsalval.chr = strdup(prsatext); return BASE64; } Modulus { return MODULUS; } PublicExponent { return PUBLIC_EXPONENT; } PrivateExponent { return PRIVATE_EXPONENT; } Prime1 { return PRIME1; } Prime2 { return PRIME2; } Exponent1 { return EXPONENT1; } Exponent2 { return EXPONENT2; } Coefficient { return COEFFICIENT; } \/ { return SLASH; } {digit}+ { prsalval.num = atol(prsatext); return NUMBER; } any { return ADDRANY; } {addr4} { prsalval.chr = strdup(prsatext); return ADDR4; } {addr6} { prsalval.chr = strdup(prsatext); return ADDR6; } [ \t]* ; \n { prsa_cur_lineno++; } \#.* ; %%