Chinafreak

Nyzo PublicKey for Identifier Image Generator

Oct 9th, 2019
209
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //createPublicIdentifierImage -> return Image in Buffer
  2.  
  3. function createPublicIdentifierImage(canvas, identifier) {
  4.     function generateImages(publicKey) {
  5.         var publicLabel = 'ffe368dc67f88fffffed6b5edbfdb7ffffed6b5edffdb7ffffe368dedffdb7ffffef6b5edffdb7ffffef6b5edb' +
  6.             'fdb7ffffef98c467f88fff';
  7.         drawKey(canvas, '__nyzopublicid__', hexStringAsUint8Array(publicKey.toLowerCase().replace(/-/g, "")), hexStringAsUint8Array(publicLabel));
  8.         return canvas.toBuffer();
  9.     }
  10.     function hexStringAsUint8Array(identifier) {
  11.         var array = new Uint8Array(identifier.length / 2);
  12.         for (var i = 0; i < array.length; i++) {
  13.             array[i] = parseInt(identifier.substring(i * 2, i * 2 + 2), 16);
  14.         }
  15.         return array;
  16.     }
  17.  
  18.     function drawKey(canvas, delimiter, key, label) {
  19.         var combinedArray = new Uint8Array(48);
  20.         if (delimiter.length == 16) {
  21.             for (var i = 0; i < 16; i++) {
  22.                 combinedArray[i] = delimiter.charCodeAt(i);
  23.             }
  24.             for (var i = 16; i < 48; i++) {
  25.                 combinedArray[i] = key[i - 16];
  26.             }
  27.         } else {
  28.             for (var i = 0; i < 48; i++) {
  29.                 combinedArray[i] = Math.floor(i / 8) % 2 == 1 ? 170 : 85;
  30.             }
  31.         }
  32.  
  33.         var context = canvas.getContext("2d");
  34.         context.fillStyle = "#FFFFFF";
  35.         context.fillRect(0, 0, 64, 64);
  36.         context.fillStyle = "#000000";
  37.  
  38.         for (var y = 0; y < 24; y++) {
  39.             for (var x = 0; x < 64; x++) {
  40.                 var arrayIndex = Math.floor((x + y * 64) / 8) % combinedArray.length;
  41.                 var bitIndex = (x + y * 64) % 8;
  42.                 var value = bitAtPosition(combinedArray[arrayIndex], bitIndex);
  43.                 if (value == 0) {
  44.                     context.fillRect(x + (i % 8) * 8, y, 1, 1);
  45.                 }
  46.             }
  47.         }
  48.  
  49.         for (var i = 0; i < combinedArray.length; i++) {
  50.             for (var bit = 0; bit < 8; bit++) {
  51.                 var value = bitAtPosition(combinedArray[i], bit);
  52.                 if (value == 0) {
  53.                     var x0 = (i % 4) * 16 + bit * 2;
  54.                     var y0 = Math.floor(i / 4) * 2 + 39;
  55.                     context.fillRect(x0, y0, 2, 2);
  56.                 }
  57.             }
  58.         }
  59.  
  60.         context.fillRect(0, 24, 64, 2);
  61.         context.fillRect(0, 37, 64, 2);
  62.  
  63.         for (var i = 0; i < label.length; i++) {
  64.             var y = 28 + Math.floor(i / 8);
  65.             for (var x = 0; x < 8; x++) {
  66.                 var value = bitAtPosition(label[i], x);
  67.                 if (value == 0) {
  68.                     context.fillRect(x + (i % 8) * 8, y, 1, 1);
  69.                 }
  70.             }
  71.         }
  72.  
  73.  
  74.         for (var i = 0; i < 64; i += 2) {
  75.             context.fillRect(i, 63, 1, 1);
  76.         }
  77.     }
  78.     function bitAtPosition(value, bitPosition) {
  79.         return (value >> (7 - bitPosition)) & 0x1;
  80.     }
  81.     return generateImages(identifier);
  82. }
RAW Paste Data