/ testDefs.js
testDefs.js
 1  #!/usr/bin/env node
 2  
 3  import { promises as fs } from 'node:fs';
 4  import { ASN1 } from './asn1.js';
 5  import { Base64 } from './base64.js';
 6  import { Defs } from './defs.js';
 7  
 8  const tot = [];
 9  for await (const file of await fs.opendir('examples')) {
10      let content = await fs.readFile('examples/' + file.name);
11      try {
12          try { // try PEM first
13              content = Base64.unarmor(content);
14          } catch (ignore) { // try DER/BER then
15          }
16          let result = ASN1.decode(content);
17          content = null;
18          const types = Defs.commonTypes
19              .map(type => {
20                  const stats = Defs.match(result, type);
21                  return { type, match: stats.recognized / stats.total };
22              })
23              .sort((a, b) => b.match - a.match);
24          tot.push([ types[0].match, file.name, types[0].type.description ]);
25      } catch (e) {
26          tot.push([ 0, file.name, e.message ]);
27      }
28  }
29  for (const f of tot)
30      console.log(f[0].toFixed(3) + '\t' + f[1] + '\t' + f[2]);
31  const avg = tot.map(f => f[0]).reduce((sum, val) => sum + val) / tot.length;
32  console.log('\x1B[1m\x1B[32m' + (avg * 100).toFixed(3) + '\x1B[39m\x1B[22m%\tAVERAGE');