1#! /usr/bin/env perl 2# Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. 3# 4# Licensed under the OpenSSL license (the "License"). You may not use 5# this file except in compliance with the License. You can obtain a copy 6# in the file LICENSE in the source distribution or at 7# https://www.openssl.org/source/license.html 8 9use strict; 10use warnings; 11 12my $NUMBER = 0x0001; 13my $UPPER = 0x0002; 14my $LOWER = 0x0004; 15my $UNDER = 0x0100; 16my $PUNCTUATION = 0x0200; 17my $WS = 0x0010; 18my $ESC = 0x0020; 19my $QUOTE = 0x0040; 20my $DQUOTE = 0x0400; 21my $COMMENT = 0x0080; 22my $FCOMMENT = 0x0800; 23my $EOF = 0x0008; 24my @V_def; 25my @V_w32; 26 27my $v; 28my $c; 29foreach (0 .. 127) { 30 $c = sprintf("%c", $_); 31 $v = 0; 32 $v |= $NUMBER if $c =~ /[0-9]/; 33 $v |= $UPPER if $c =~ /[A-Z]/; 34 $v |= $LOWER if $c =~ /[a-z]/; 35 $v |= $UNDER if $c =~ /_/; 36 $v |= $PUNCTUATION if $c =~ /[!\.%&\*\+,\/;\?\@\^\~\|-]/; 37 $v |= $WS if $c =~ /[ \t\r\n]/; 38 $v |= $ESC if $c =~ /\\/; 39 $v |= $QUOTE if $c =~ /['`"]/; # for emacs: "`' 40 $v |= $COMMENT if $c =~ /\#/; 41 $v |= $EOF if $c =~ /\0/; 42 push(@V_def, $v); 43 44 $v = 0; 45 $v |= $NUMBER if $c =~ /[0-9]/; 46 $v |= $UPPER if $c =~ /[A-Z]/; 47 $v |= $LOWER if $c =~ /[a-z]/; 48 $v |= $UNDER if $c =~ /_/; 49 $v |= $PUNCTUATION if $c =~ /[!\.%&\*\+,\/;\?\@\^\~\|-]/; 50 $v |= $WS if $c =~ /[ \t\r\n]/; 51 $v |= $DQUOTE if $c =~ /["]/; # for emacs: " 52 $v |= $FCOMMENT if $c =~ /;/; 53 $v |= $EOF if $c =~ /\0/; 54 push(@V_w32, $v); 55} 56 57# Output year depends on the year of the script. 58my $YEAR = [localtime([stat($0)]->[9])]->[5] + 1900; 59 60print <<"EOF"; 61/* 62 * WARNING: do not edit! 63 * Generated by crypto/conf/keysets.pl 64 * 65 * Copyright 1995-$YEAR The OpenSSL Project Authors. All Rights Reserved. 66 * Licensed under the OpenSSL license (the "License"). You may not use 67 * this file except in compliance with the License. You can obtain a copy 68 * in the file LICENSE in the source distribution or at 69 * https://www.openssl.org/source/license.html 70 */ 71 72#define CONF_NUMBER $NUMBER 73#define CONF_UPPER $UPPER 74#define CONF_LOWER $LOWER 75#define CONF_UNDER $UNDER 76#define CONF_PUNCT $PUNCTUATION 77#define CONF_WS $WS 78#define CONF_ESC $ESC 79#define CONF_QUOTE $QUOTE 80#define CONF_DQUOTE $DQUOTE 81#define CONF_COMMENT $COMMENT 82#define CONF_FCOMMENT $FCOMMENT 83#define CONF_EOF $EOF 84#define CONF_ALPHA (CONF_UPPER|CONF_LOWER) 85#define CONF_ALNUM (CONF_ALPHA|CONF_NUMBER|CONF_UNDER) 86#define CONF_ALNUM_PUNCT (CONF_ALPHA|CONF_NUMBER|CONF_UNDER|CONF_PUNCT) 87 88 89#define IS_COMMENT(conf,c) is_keytype(conf, c, CONF_COMMENT) 90#define IS_FCOMMENT(conf,c) is_keytype(conf, c, CONF_FCOMMENT) 91#define IS_EOF(conf,c) is_keytype(conf, c, CONF_EOF) 92#define IS_ESC(conf,c) is_keytype(conf, c, CONF_ESC) 93#define IS_NUMBER(conf,c) is_keytype(conf, c, CONF_NUMBER) 94#define IS_WS(conf,c) is_keytype(conf, c, CONF_WS) 95#define IS_ALNUM(conf,c) is_keytype(conf, c, CONF_ALNUM) 96#define IS_ALNUM_PUNCT(conf,c) is_keytype(conf, c, CONF_ALNUM_PUNCT) 97#define IS_QUOTE(conf,c) is_keytype(conf, c, CONF_QUOTE) 98#define IS_DQUOTE(conf,c) is_keytype(conf, c, CONF_DQUOTE) 99 100EOF 101 102my $i; 103 104print "static const unsigned short CONF_type_default[128] = {"; 105for ($i = 0; $i < 128; $i++) { 106 print "\n " if ($i % 8) == 0; 107 printf " 0x%04X,", $V_def[$i]; 108} 109print "\n};\n\n"; 110 111print "static const unsigned short CONF_type_win32[128] = {"; 112for ($i = 0; $i < 128; $i++) { 113 print "\n " if ($i % 8) == 0; 114 printf " 0x%04X,", $V_w32[$i]; 115} 116print "\n};\n"; 117