aes-performance.js
Summary
Measure AES and RND performance
var SmartCardHSM = require('scsh/sc-hsm/SmartCardHSM').SmartCardHSM;
var SmartCardHSMInitializer = require("scsh/sc-hsm/SmartCardHSM").SmartCardHSMInitializer;
var DKEK = require('scsh/sc-hsm/DKEK').DKEK;
var HSMKeyStore = require("scsh/sc-hsm/HSMKeyStore").HSMKeyStore;
assert(Dialog.prompt("OK to initialize device ?"));
var aes = new Key();
aes.setComponent(Key.AES, new ByteString("00112233445566778899AABBCCDDEEFF", HEX));
var crypto = new Crypto();
var card = new Card(_scsh3.reader);
card.reset(Card.RESET_COLD);
var sc = new SmartCardHSM(card);
var ks = new HSMKeyStore(sc);
var sci = new SmartCardHSMInitializer(card);
sci.setKeyDomains(1);
sci.initialize();
sc.createDKEKKeyDomain(0, 1);
var share = new ByteString("0000000000000000000000000000000000000000000000000000000000000000", HEX);
sc.importKeyShare(0, share);
var dkek = new DKEK(crypto);
dkek.importDKEKShare(share);
var blob = dkek.encodeAESKey(aes);
var key = ks.importAESKey("ImportedAESKey", blob, 128);
var iv = new ByteString("00000000000000000000000000000000", HEX);
var plain = new ByteString("00000000000000000000000000000000", HEX);
var iter = 100;
print("ECB (16 bytes) with " + iter + " iterations");
var ref = crypto.encrypt(aes, Crypto.AES_ECB, plain, iv);
var ts = Date.now();
for (var i = 0; i < iter; i++) {
var enc = sc.card.sendApdu(0x80, 0x78, key.getId(), 0x10, plain, [0x9000]);
assert(enc.equals(ref), "Reference encryption does not match");
}
var st = Date.now() - ts;
print("Elapsed " + st + " ms / " + st / iter + " ms");
var len = 1216;
var plain = crypto.generateRandom(len);
var ref = crypto.encrypt(aes, Crypto.AES_CBC, plain, iv);
print("CBC (" + len + " bytes) with " + iter + " iterations");
var ts = Date.now();
for (var i = 0; i < iter; i++) {
var enc = sc.card.sendApdu(0x80, 0x78, key.getId(), 0x10, plain, [0x9000]);
assert(enc.equals(ref), "Reference encryption does not match");
}
var st = Date.now() - ts;
print("Elapsed " + st + " ms / " + st / iter + " ms");
print("RND (8 bytes) with " + iter + " iterations");
var ts = Date.now();
for (var i = 0; i < iter; i++) {
var rnd = sc.card.sendApdu(0x00, 0x84, 0x00, 0x00, 8, [0x9000]);
}
var st = Date.now() - ts;
print("Elapsed " + st + " ms / " + st / iter + " ms");
print("RND (256) with " + iter + " iterations");
var ts = Date.now();
for (var i = 0; i < iter; i++) {
var rnd = sc.card.sendApdu(0x00, 0x84, 0x00, 0x00, 256, [0x9000]);
}
var st = Date.now() - ts;
print("Elapsed " + st + " ms / " + st / iter + " ms");
Documentation generated by
JSDoc on Sat Feb 24 15:17:19 2024