/ 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');