<script src="https://cdnjs.cloudflare.com/ajax/libs/forge/0.9.1/forge.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rusha/0.8.7/rusha.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@cryptography/sha1@0.2.0/dist/umd/sha1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/sjcl/1.0.6/sjcl.min.js"></script>
var buf = new Uint8Array(128);
window.crypto.getRandomValues(buf);
var str = String.fromCharCode.apply(null, buf);
crypto.subtle.digest("SHA-1", buf).then(() => {
deferred.resolve();
});
new Rusha().append(str).rawEnd().buffer;
sha1(str);
forge.md.sha1.create().update(str).digest();
sjcl.hash.sha1.hash(str)