{% extends "bases/bootstrap.html" %} {% load staticfiles %} {% block tail_js %} <script> Module = {}; Module.memoryInitializerPrefixURL = "{% static 'js/' %}"; </script> <script src="//code.jquery.com/jquery-2.2.4.min.js"></script> <!-- <script>window.jQuery || document.write('<script src="js/jquery-1.10.1.min.js"><\/script>')</script> --> <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script> <script src='https://www.google.com/recaptcha/api.js'></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script> <script src="{% static 'js/papaparse.min.js' %}" type="text/javascript"></script> <script src="{% static 'js/create-event-poll.js' %}" type="text/javascript"></script> <script src="{% static 'js/encrypt.js' %}" type="text/javascript"></script> <script type="text/javascript" src="{% static 'js/core/rand.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/rom_curve.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/rom_field.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/uint64.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/aes.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/big.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/gcm.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/hash256.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/hash384.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/hash512.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/sha3.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/newhope.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/nhs.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/fp.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/fp2.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/fp4.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/fp12.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/ff.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/rsa.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/ecp.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/ecp2.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/ecdh.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/pair.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/mpin.js' %}"></script> <script type="text/javascript" src="{% static 'js/core/ctx.js' %}"></script> <script type="text/javascript" src="{% static 'js/demos2-booth.js' %}"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.js" type="text/javascript"></script> {% block app_js %} <script type="text/javascript"> {% block app_js_vars %} {% endblock %} Module.memoryInitializerPrefixURL = "LOL"; var demosEncrypt = { } /* Code written with "New function" comments have been totally or mostly re-implemented by Thomas Smith */ //new function demosEncrypt.encryptAndSubmit = function() { var ctx = new CTX("BN254CX"); //new context we can use var n = new ctx.BIG(); var g1 = new ctx.ECP(); var g2 = new ctx.ECP2(); var param = $('#event-param').val(); //console.log(param); var tempParams = JSON.parse(param); //copying the values n.copy(tempParams.n); g1.copy(tempParams.g1); g2.copy(tempParams.g2); var params = { n:n, g1:g1, g2:g2 } var tempPK = JSON.parse($('#comb_pk').val()); var pk = new ctx.ECP(0); pk.copy(tempPK.PK); var answer = $('#poll-options').val(); console.log(answer); var cipher = encrypt(params, pk, answer); var c1Bytes = []; cipher.C1.toBytes(c1Bytes); var c2Bytes = []; cipher.C2.toBytes(c2Bytes); $('#id_cipher_text_c1').val(c1Bytes.toString()); $('#id_cipher_text_c2').val(c2Bytes.toString()); $('#cipher-form').submit(); } //new function demosEncrypt.decryptCipher = function() { var skString = $('#secret-key').val(); if (!skString) { alert("Please enter your secret key"); } else { //rebuild our secret key var ctx = new CTX("BN254CX"); var skBytes = skString.split(","); var sk =new ctx.BIG.fromBytes(skBytes); var inputs = $("form input[type=text]"); inputs.each(function() { //for each ciphertext to decrypt var ciphertext = { C1: new ctx.ECP(), C2: new ctx.ECP() } var temp = JSON.parse($(this).val()); ciphertext.C1.copy(temp.C1); ciphertext.C2.copy(temp.C2); var partial = partDec(sk, ciphertext);//returns an object containing an ECP() var bytes = []; partial.D.toBytes(bytes); $(this).val(bytes.toString());//submit in byte array form }) $('input[type=submit]').prop("disabled", false); } } //new function demosEncrypt.generateKeys = function() { parameter = $("#event-param").val(); var tempParams = JSON.parse(parameter); //the full objects need to be initalised as per the library, then copy the values we need into it //I follow Bingsheng's code as to what objects are used in the parameter object var ctx = new CTX("BN254CX"); //new context we can use var n = new ctx.BIG(); var g1 = new ctx.ECP(); var g2 = new ctx.ECP2(); //copying the values n.copy(tempParams.n); g1.copy(tempParams.g1); g2.copy(tempParams.g2); var params = { n:n, g1:g1, g2:g2 } var PKbytes = []; var SKbytes = []; var keypair = keyGen(params); keypair.PK.toBytes(PKbytes); keypair.SK.toBytes(SKbytes); $('input#public-key').val(PKbytes.toString()); $('input#secret-key').val(SKbytes.toString()); //mostly code from before here var blob = new Blob([SKbytes.toString()], {type : 'text/plain'}); var dlBtn = $('a#download-btn'); var url = URL.createObjectURL(blob); var fileName = $(dlBtn).attr("href", url); $(dlBtn).attr("download", "sk-{% block sk-file-name %}{% endblock %}".replace(/[\W]/g, "-")); $(dlBtn).attr("disabled", false); $("#public-submit").attr("disabled", false); } //these other functions might not be used //I don't think this is used demosEncrypt.downloadSecretKey = function() { var blob = new Blob([sk], {type : 'text/plain'}); var dlBtn = $('a#download-btn'); $(dlBtn).attr("disabled", true); } function getFormsetPrefix(id) { id = id.replace(/(?:id_)?formset_/, ""); // strip generic part return id.replace(/([A-Za-z0-9]+)[\w-]*/, "$1"); // return prefix } function setFormsetIndex(ele, prefix, index) { ele = $(ele).find("div[id^='id_formset'], input[id^='id_formset']").each(function (i, el) { var id = $(el).attr("id"); id = "id_formset_" + prefix + '-' + index + id.match(/-\w+$/); $(el).attr("id", id); if ($(el).is("input")) { $(el).attr("name", id.replace(/^id_/, "")); } }); } $('.formset').sortable({handle:".input-group-addon", items:".formset_object", start: function(event, ui) { ui.item.prevPos = ui.item.index(); console.log(ui.item.prevPos); }, update: function(event, ui) { ui.item.prevPos = null; }, beforeStop: function(event, ui) { $(ui.item).css("animation", "none"); // prevents firing of entry keyframe } }); //$('.glyphicon.glyphicon-trash').parent().hide(); $('.formset').find $('.formset').on('click', '.input-group-addon', function() { // this makes the label a delete btn too :( var ele = $(this).closest(".formset_object"); var prefix = $(this).closest(".formset_object").data("prefix") || getFormsetPrefix($(this).closest(".formset_object").find('input:first').attr("id")); var current_total = parseInt($("#id_formset_" + prefix + "-TOTAL_FORMS").val()); if (current_total <= $("#id_formset_" + prefix + "-MIN_NUM_FORMS").val()) { return; // don't allow removal of last element } ele.remove(); $("#id_formset_" + prefix + "-TOTAL_FORMS").val(current_total - 1); $(".formset").sortable( "refresh" ); $(".formset").sortable( "refreshPositions" ); }); $('.add-another-btn').on('click',function() { var new_formset_item = $(this).prevAll(".formset_object:first").clone(); var prefix = getFormsetPrefix(new_formset_item.find("input:first").attr("id")); var current_total = parseInt($("#id_formset_" + prefix + "-TOTAL_FORMS").val()); if (current_total >= $("#id_formset_" + prefix + "-MAX_NUM_FORMS").val()) { return; // don't allow more than max forms } new_formset_item.data("prefix", prefix); $(this).before(new_formset_item); new_formset_item.find("input").val(""); setFormsetIndex(new_formset_item, prefix, parseInt($("#id_formset_" + prefix + "-TOTAL_FORMS").val())); $("#id_formset_" + prefix + "-TOTAL_FORMS").val(parseInt($("#id_formset_" + prefix + "-TOTAL_FORMS").val()) +1); $(".formset").sortable( "refresh" ); $(".formset").sortable( "refreshPositions" ); }); // rudimentary accordion error handling $('.has-error').closest('.panel').find('.panel-heading').addClass("error"); $('.alert.alert-block.alert-danger').closest('.panel').find('.panel-heading').addClass("error"); </script> {% endblock %} {% endblock %}