certdata.perl
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:8k
源码类别:

CA认证

开发平台:

WINDOWS

  1. #!perl -w
  2. # The contents of this file are subject to the Mozilla Public
  3. # License Version 1.1 (the "License"); you may not use this file
  4. # except in compliance with the License. You may obtain a copy of
  5. # the License at http://www.mozilla.org/MPL/
  6. # Software distributed under the License is distributed on an "AS
  7. # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  8. # implied. See the License for the specific language governing
  9. # rights and limitations under the License.
  10. # The Original Code is the Netscape security libraries.
  11. # The Initial Developer of the Original Code is Netscape
  12. # Communications Corporation.  Portions created by Netscape are 
  13. # Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  14. # Rights Reserved.
  15. # Contributor(s):
  16. # Alternatively, the contents of this file may be used under the
  17. # terms of the GNU General Public License Version 2 or later (the
  18. # "GPL"), in which case the provisions of the GPL are applicable 
  19. # instead of those above.  If you wish to allow use of your 
  20. # version of this file only under the terms of the GPL and not to
  21. # allow others to use your version of this file under the MPL,
  22. # indicate your decision by deleting the provisions above and
  23. # replace them with the notice and other provisions required by
  24. # the GPL.  If you do not delete the provisions above, a recipient
  25. # may use your version of this file under either the MPL or the
  26. # GPL.
  27. #
  28. my $cvs_id = '@(#) $RCSfile: certdata.perl,v $ $Revision: 1.6 $ $Date: 2000/09/06 22:23:59 $ $Name: NSS_3_1_1_RTM $';
  29. use strict;
  30. my %constants;
  31. my $count = 0;
  32. my $o;
  33. my @objects = ();
  34. my @objsize;
  35. my $cvsid;
  36. $constants{CKO_DATA} = "static const CK_OBJECT_CLASS cko_data = CKO_DATA;n";
  37. $constants{CK_TRUE} = "static const CK_BBOOL ck_true = CK_TRUE;n";
  38. $constants{CK_FALSE} = "static const CK_BBOOL ck_false = CK_FALSE;n";
  39. while(<>) {
  40.   my @fields = ();
  41.   my $size;
  42.   s/^((?:[^"#]+|"[^"]*")*)(s*#.*$)/$1/;
  43.   next if (/^s*$/);
  44.   if( /(^CVS_IDs+)(.*)/ ) {
  45. #    print "The CVS ID is $2n";
  46.     $cvsid = $2 . ""; $cvs_id"";
  47.     my $scratch = $cvsid;
  48.     $size = 1 + $scratch =~ s/[^"n]//g;
  49.     @{$objects[0][0]} = ( "CKA_CLASS", "&cko_data", "sizeof(CK_OBJECT_CLASS)" );
  50.     @{$objects[0][1]} = ( "CKA_TOKEN", "&ck_true", "sizeof(CK_BBOOL)" );
  51.     @{$objects[0][2]} = ( "CKA_PRIVATE", "&ck_false", "sizeof(CK_BBOOL)" );
  52.     @{$objects[0][3]} = ( "CKA_MODIFIABLE", "&ck_false", "sizeof(CK_BBOOL)" );
  53.     @{$objects[0][4]} = ( "CKA_LABEL", ""CVS ID"", "7" );
  54.     @{$objects[0][5]} = ( "CKA_APPLICATION", ""NSS"", "4" );
  55.     @{$objects[0][6]} = ( "CKA_VALUE", $cvsid, "$size" );
  56.     $objsize[0] = 7;
  57.     next;
  58.   }
  59.   # This was taken from the perl faq #4.
  60.   my $text = $_;
  61.   push(@fields, $+) while $text =~ m{
  62.       "([^"\]*(?:\.[^"\]*)*)"s?  # groups the phrase inside the quotes
  63.     | ([^s]+)s?
  64.     | s
  65.   }gx;
  66.   push(@fields, undef) if substr($text,-1,1) eq 's';
  67.   if( $fields[0] =~ /BEGINDATA/ ) {
  68.     next;
  69.   }
  70.   if( $fields[1] =~ /MULTILINE/ ) {
  71.     $fields[2] = "";
  72.     while(<>) {
  73.       last if /END/;
  74.       chomp;
  75.       $fields[2] .= ""$_"n";
  76.     }
  77.   }
  78.   if( $fields[1] =~ /UTF8/ ) {
  79.     if( $fields[2] =~ /^"/ ) {
  80.       ;
  81.     } else {
  82.       $fields[2] = """ . $fields[2] . """;
  83.     }
  84.     my $scratch = $fields[2];
  85.     $size = $scratch =~ s/[^"n]//g; # should supposedly handle multilines, too..
  86.     $size += 1; # null terminate
  87.   }
  88.   if( $fields[1] =~ /OCTAL/ ) {
  89.     if( $fields[2] =~ /^"/ ) {
  90.       ;
  91.     } else {
  92.       $fields[2] = """ . $fields[2] . """;
  93.     }
  94.     my $scratch = $fields[2];
  95.     $size = $scratch =~ tr/\//;
  96.     # no null termination
  97.   }
  98.   if( $fields[1] =~ /^CK_/ ) {
  99.     my $lcv = $fields[2];
  100.     $lcv =~ tr/A-Z/a-z/;
  101.     if( !defined($constants{$fields[2]}) ) {
  102.       $constants{$fields[2]} = "static const $fields[1] $lcv = $fields[2];n";
  103.     }
  104.     
  105.     $size = "sizeof($fields[1])";
  106.     $fields[2] = "&$lcv";
  107.   }
  108.   if( $fields[0] =~ /CKA_CLASS/ ) {
  109.     $count++;
  110.     $objsize[$count] = 0;
  111.   }
  112.   @{$objects[$count][$objsize[$count]++]} = ( "$fields[0]", $fields[2], "$size" );
  113.  # print "$fields[0] | $fields[1] | $size | $fields[2]n";
  114. }
  115. doprint();
  116. sub dudump {
  117. my $i;
  118. for( $i = 0; $i <= $count; $i++ ) {
  119.   print "n";
  120.   $o = $objects[$i];
  121.   my @ob = @{$o};
  122.   my $l;
  123.   my $j;
  124.   for( $j = 0; $j < @ob; $j++ ) {
  125.     $l = $ob[$j];
  126.     my @a = @{$l};
  127.     print "$a[0] ! $a[1] ! $a[2]n";
  128.   }
  129. }
  130. }
  131. sub doprint {
  132. my $i;
  133. open(CFILE, ">certdata.c") || die "Can't open certdata.c: $!";
  134. print CFILE <<EOD
  135. /* THIS IS A GENERATED FILE */
  136. /* 
  137.  * The contents of this file are subject to the Mozilla Public
  138.  * License Version 1.1 (the "License"); you may not use this file
  139.  * except in compliance with the License. You may obtain a copy of
  140.  * the License at http://www.mozilla.org/MPL/
  141.  * 
  142.  * Software distributed under the License is distributed on an "AS
  143.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  144.  * implied. See the License for the specific language governing
  145.  * rights and limitations under the License.
  146.  * 
  147.  * The Original Code is the Netscape security libraries.
  148.  * 
  149.  * The Initial Developer of the Original Code is Netscape
  150.  * Communications Corporation.  Portions created by Netscape are 
  151.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  152.  * Rights Reserved.
  153.  * 
  154.  * Contributor(s):
  155.  * 
  156.  * Alternatively, the contents of this file may be used under the
  157.  * terms of the GNU General Public License Version 2 or later (the
  158.  * "GPL"), in which case the provisions of the GPL are applicable 
  159.  * instead of those above.  If you wish to allow use of your 
  160.  * version of this file only under the terms of the GPL and not to
  161.  * allow others to use your version of this file under the MPL,
  162.  * indicate your decision by deleting the provisions above and
  163.  * replace them with the notice and other provisions required by
  164.  * the GPL.  If you do not delete the provisions above, a recipient
  165.  * may use your version of this file under either the MPL or the
  166.  * GPL.
  167.  */
  168. #ifdef DEBUG
  169. static const char CVS_ID[] = $cvsid;
  170. #endif /* DEBUG */
  171. #ifndef BUILTINS_H
  172. #include "builtins.h"
  173. #endif /* BUILTINS_H */
  174. EOD
  175.     ;
  176. while(($a,$b) = each(%constants)) {
  177.   print CFILE $b;
  178. }
  179. for( $i = 0; $i <= $count; $i++ ) {
  180.   if( 0 == $i ) {
  181.     print CFILE "#ifdef DEBUGn";
  182.   }
  183.   print CFILE "static const CK_ATTRIBUTE_TYPE nss_builtins_types_$i [] = {n";
  184.   $o = $objects[$i];
  185.  # print STDOUT "type $i object $o n";
  186.   my @ob = @{$o};
  187.   my $j;
  188.   for( $j = 0; $j < @ob; $j++ ) {
  189.     my $l = $ob[$j];
  190.     my @a = @{$l};
  191.     print CFILE " $a[0]";
  192.     if( $j+1 != @ob ) {
  193.       print CFILE ", ";
  194.     }
  195.   }
  196.   print CFILE "n};n";
  197.   if( 0 == $i ) {
  198.     print CFILE "#endif /* DEBUG */n";
  199.   }
  200. }
  201. for( $i = 0; $i <= $count; $i++ ) {
  202.   if( 0 == $i ) {
  203.     print CFILE "#ifdef DEBUGn";
  204.   }
  205.   print CFILE "static const NSSItem nss_builtins_items_$i [] = {n";
  206.   $o = $objects[$i];
  207.   my @ob = @{$o};
  208.   my $j;
  209.   for( $j = 0; $j < @ob; $j++ ) {
  210.     my $l = $ob[$j];
  211.     my @a = @{$l};
  212.     print CFILE "  { (void *)$a[1], (PRUint32)$a[2] }";
  213.     if( $j+1 != @ob ) {
  214.       print CFILE ",n";
  215.     } else {
  216.       print CFILE "n";
  217.     }
  218.   }
  219.   print CFILE "};n";
  220.   if( 0 == $i ) {
  221.     print CFILE "#endif /* DEBUG */n";
  222.   }
  223. }
  224. print CFILE "nPR_IMPLEMENT_DATA(const builtinsInternalObject)n";
  225. print CFILE "nss_builtins_data[] = {n";
  226. for( $i = 0; $i <= $count; $i++ ) {
  227.   if( 0 == $i ) {
  228.     print CFILE "#ifdef DEBUGn";
  229.   }
  230.   print CFILE "  { $objsize[$i], nss_builtins_types_$i, nss_builtins_items_$i }";
  231.   if( $i == $count ) {
  232.     print CFILE "n";
  233.   } else {
  234.     print CFILE ",n";
  235.   }
  236.   if( 0 == $i ) {
  237.     print CFILE "#endif /* DEBUG */n";
  238.   }
  239. }
  240. print CFILE "};n";
  241. print CFILE "PR_IMPLEMENT_DATA(const PRUint32)n";
  242. print CFILE "#ifdef DEBUGn";
  243. print CFILE "  nss_builtins_nObjects = $count+1;n";
  244. print CFILE "#elsen";
  245. print CFILE "  nss_builtins_nObjects = $count;n";
  246. print CFILE "#endif /* DEBUG */n";
  247. }