ietf
[Top] [All Lists]

Re: RFC 6234 code

2013-06-28 20:46:40
Martin Rex wrote:
Dearlove, Christopher (UK) wrote:

I'd actually tried the authors, but no reply yet (only a few days).
I also tried the RFC Editor thinking they might have e.g. XML
from which extraction might have been easier, but also no response yet.

Extracting code from text is pretty trivial.

Use copy&paste from the output of below simple perl script
(which removes the pagebreaks):

Modified script which also does the extraction of the files
into the current directory as well (below).

  cc -c shatest.c sha1.c sha224-256.c sha384-512.c usha.c hmac.c hkdf.c
  cc -o shatest shatest.o sha1.o sha224-256.o sha384-512.o usha.o hmac.o hkdf.o
  ./shatest

it seems to work (for me on Linux, at least)

-Martin



#!/usr/bin/perl
#
$rfcnum="6234";
$footerpattern="^Eastlake";
$headerpattern="^RFC ${rfcnum}";

$url = "http://tools.ietf.org/rfc/rfc${rfcnum}.txt";;

open(IN,"curl '${url}'|")
  || die("Download of \"$url\" failed: $!\n");
@origdoc = <IN>;
close(IN);

@doc  = ();
$show = 2;
$fname = "";
@file = ();

foreach $line ( @origdoc ) {

   $line =~ tr/\r\n//d;
   if ( $line =~ m/${footerpattern}/io ) {
      $show = 0;
      while ( $#doc >=0 && "" eq $doc[$#doc] ) {
         pop(@doc);
      }
      while ( $#file>=0 && "" eq $file[$#file] ) {
         pop(@file);
      }
   }
   if ( $show>0 ) {
      if ( 2==$show || $line ne "" ) {
         push(@doc, $line);
         $show = 2;
         if ( $fname eq "" && $line =~ m#^/\*\*.* (\w.+) \*\*#io ) {
            $fname = $1;
            $fname =~ tr/a-zA-Z0-9._-//cd;
            @file  = ();
         }
         if ( "" ne $fname ) {
            if ( $line =~ m/^\d/io ) {
               $filedata = join("\n",@file) . "\n";
               $filelen  = length($filedata);
               printf("Writing file \"$fname\" (len=${filelen})\n");
               open(OUT,">$fname")
                 || die("Could not write file \"$fname\": $!\n");
               print OUT $filedata;
               close(OUT);
               $fname = "";
            } else {
               push(@file, $line);
            }
         }
      }
   }
   if ( 0==$show && $line =~ m/${headerpattern}/io ) {
      $show = 1;
   }
}

# print join("\n",@doc), "\n";

<Prev in Thread] Current Thread [Next in Thread>