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