@pingleware/crypto-js
Version:
Merging CryptoJS with noble-post-quantum.
282 lines (244 loc) • 12.4 kB
HTML
<html>
<head>
<meta charset="utf-8">
<title>CryptoJS Profile</title>
<!-- CryptoJS -->
<script src="../src/core.js"></script>
<script src="../src/x64-core.js"></script>
<script src="../src/enc-utf16.js"></script>
<script src="../src/enc-base64.js"></script>
<script src="../src/md5.js"></script>
<script src="../src/sha1.js"></script>
<script src="../src/sha256.js"></script>
<script src="../src/sha512.js"></script>
<script src="../src/sha3.js"></script>
<script src="../src/hmac.js"></script>
<script src="../src/pbkdf2.js"></script>
<script src="../src/evpkdf.js"></script>
<script src="../src/cipher-core.js"></script>
<script src="../src/mode-cfb.js"></script>
<script src="../src/mode-ctr.js"></script>
<script src="../src/mode-ofb.js"></script>
<script src="../src/mode-ecb.js"></script>
<script src="../src/pad-ansix923.js"></script>
<script src="../src/pad-iso10126.js"></script>
<script src="../src/pad-zeropadding.js"></script>
<script src="../src/pad-iso97971.js"></script>
<script src="../src/pad-nopadding.js"></script>
<script src="../src/rc4.js"></script>
<script src="../src/rabbit.js"></script>
<script src="../src/aes.js"></script>
<script src="../src/tripledes.js"></script>
<!-- YUI -->
<script src="http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js"></script>
<!-- Profile subjects -->
<script src="md5-profile.js"></script>
<script src="sha1-profile.js"></script>
<script src="sha256-profile.js"></script>
<script src="sha512-profile.js"></script>
<script src="sha3-profile.js"></script>
<script src="hmac-profile.js"></script>
<script src="pbkdf2-profile.js"></script>
<script src="evpkdf-profile.js"></script>
<script src="rc4-profile.js"></script>
<script src="rabbit-profile.js"></script>
<script src="aes-profile.js"></script>
<script src="des-profile.js"></script>
<script src="tripledes-profile.js"></script>
<!-- Profile reports -->
<script>
YUI().use('profiler', 'console', 'substitute', function (Y) {
// Implement Profiler.add
Y.Profiler._subjects = [];
Y.Profiler.add = function (subject) {
Y.Profiler._subjects.push(subject);
};
Y.Profiler.getSubjects = function () {
return Y.Profiler._subjects;
};
// Objects to profile
var objects = [
'CryptoJS.lib.Base',
'CryptoJS.lib.WordArray',
'CryptoJS.x64.Word',
'CryptoJS.x64.WordArray',
'CryptoJS.enc.Hex',
'CryptoJS.enc.Latin1',
'CryptoJS.enc.Utf8',
'CryptoJS.enc.Utf16',
'CryptoJS.enc.Base64',
'CryptoJS.lib.BufferedBlockAlgorithm',
'CryptoJS.lib.Hasher',
'CryptoJS.algo.MD5',
'CryptoJS.algo.SHA1',
'CryptoJS.algo.SHA256',
'CryptoJS.algo.SHA512',
'CryptoJS.algo.SHA3',
'CryptoJS.algo.HMAC',
'CryptoJS.algo.PBKDF2',
'CryptoJS.algo.EvpKDF',
'CryptoJS.lib.Cipher',
'CryptoJS.lib.StreamCipher',
'CryptoJS.lib.BlockCipher',
'CryptoJS.lib.BlockCipherMode',
'CryptoJS.lib.CipherParams',
'CryptoJS.lib.SerializableCipher',
'CryptoJS.lib.PasswordBasedCipher',
'CryptoJS.mode.CBC', 'CryptoJS.mode.CBC.Encryptor', 'CryptoJS.mode.CBC.Decryptor',
'CryptoJS.mode.CFB', 'CryptoJS.mode.CFB.Encryptor', 'CryptoJS.mode.CFB.Decryptor',
'CryptoJS.mode.CTR', 'CryptoJS.mode.CTR.Encryptor', 'CryptoJS.mode.CTR.Decryptor',
'CryptoJS.mode.OFB', 'CryptoJS.mode.OFB.Encryptor', 'CryptoJS.mode.OFB.Decryptor',
'CryptoJS.mode.ECB', 'CryptoJS.mode.ECB.Encryptor', 'CryptoJS.mode.ECB.Decryptor',
'CryptoJS.pad.Pkcs7',
'CryptoJS.pad.AnsiX923',
'CryptoJS.pad.Iso10126',
'CryptoJS.pad.Iso97971',
'CryptoJS.pad.ZeroPadding',
'CryptoJS.pad.NoPadding',
'CryptoJS.format.OpenSSL',
'CryptoJS.kdf.OpenSSL',
'CryptoJS.algo.RC4',
'CryptoJS.algo.RC4Drop',
'CryptoJS.algo.Rabbit',
'CryptoJS.algo.AES',
'CryptoJS.algo.DES',
'CryptoJS.algo.TripleDES'
];
function registerObjects() {
for (var i = 0; i < objects.length; i++) {
Y.Profiler.registerObject(objects[i]);
}
}
function unregisterObjects() {
for (var i = 0; i < objects.length; i++) {
Y.Profiler.unregisterObject(objects[i]);
}
}
// Load profile subjects
Y.use('*', function (Y) {
// Iterate over profile subjects
var subjects = Y.Profiler.getSubjects();
for (var nSubject = 0; nSubject < subjects.length; nSubject++) {
// Shortcut
var subject = subjects[nSubject];
// Iterate over profile subject methods
for (var methodName in subject) {
if (typeof subject[methodName] == 'function' && methodName.indexOf('profile') == 0) {
// Set up
if (subject['setUp']) {
subject['setUp']();
}
// Run
registerObjects();
subject[methodName]();
unregisterObjects();
// Tear down
if (subject['tearDown']) {
subject['tearDown']();
}
// Get reports
var reports = Y.Profiler.getFullReport(function (report) {
// Skip reports with 0 calls
if ( ! report.calls) {
return false;
}
// Create "total" entry
report.total = 0;
for (var i = 0; i < report.points.length; i++) {
report.total += report.points[i];
}
// Round "avg" entry
report.avg = Number(report.avg.toFixed(4));
return true;
});
// Add name to reports
for (var name in reports) {
reports[name].name = name;
}
// Sort reports by total time
var orderedReports = [];
for (var name in reports) {
orderedReports.push(reports[name]);
}
orderedReports.sort(function (a, b) {
return ((b.total - a.total) || (b.calls - a.calls));
});
// Create profile source
var source = subject.name + '_' + methodName;
// Create console
var yconsole = new Y.Console({
style: 'block',
width: '100%',
height: '600px',
entryTemplate:
'<div class="{entry_class} {cat_class} {src_class}">' +
' <pre class="{entry_content_class}">{message}</pre>' +
'</div>',
strings: {
title: source,
pause: 'Pause',
clear: 'Clear',
collapse: 'Collapse',
expand: 'Expand'
},
newestOnTop: false,
render: true
});
// Restrict profile sources
(function (yconsole, source) {
yconsole.on('entry', function (e) {
if (e.message.source != source) {
e.preventDefault();
}
});
}(yconsole, source));
// Collapse doesn't seem to work reliably unless we do it after DOM ready
(function (yconsole) {
Y.on('domready', function () {
yconsole.collapse();
});
}(yconsole));
// Log reports
for (var i = 0; i < orderedReports.length; i++) {
var template =
'[{total}ms] {name}(): Called {calls} times. ' +
'Avg: {avg}ms, Min: {min}ms, Max: {max}ms';
var message = Y.substitute(template, orderedReports[i]);
Y.log(message, 'time', source);
}
// Clean slate for next profile subject
Y.Profiler.clear();
}
}
}
});
});
</script>
<!-- Console -->
<style type="text/css">
body.yui3-skin-sam .yui3-console {
margin: 1em 0;
}
body.yui3-skin-sam .yui3-console-entry-meta,
body.yui3-skin-sam .yui3-console-entry-content {
display: inline-block;
vertical-align: top;
}
body.yui3-skin-sam .yui3-console-entry-cat {
display: inline-block;
width: 35px;
text-align: center;
}
body.yui3-skin-sam .yui3-console-entry {
min-height: 0;
}
body.yui3-skin-sam .yui3-console-ft .yui3-console-filters-categories,
body.yui3-skin-sam .yui3-console-ft .yui3-console-filters-sources {
display: none;
}
</style>
</head>
<body class="yui3-skin-sam">
</body>
</html>