Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //createPublicIdentifierImage -> return Image in Buffer
- function createPublicIdentifierImage(canvas, identifier) {
- function generateImages(publicKey) {
- var publicLabel = 'ffe368dc67f88fffffed6b5edbfdb7ffffed6b5edffdb7ffffe368dedffdb7ffffef6b5edffdb7ffffef6b5edb' +
- 'fdb7ffffef98c467f88fff';
- drawKey(canvas, '__nyzopublicid__', hexStringAsUint8Array(publicKey.toLowerCase().replace(/-/g, "")), hexStringAsUint8Array(publicLabel));
- return canvas.toBuffer();
- }
- function hexStringAsUint8Array(identifier) {
- var array = new Uint8Array(identifier.length / 2);
- for (var i = 0; i < array.length; i++) {
- array[i] = parseInt(identifier.substring(i * 2, i * 2 + 2), 16);
- }
- return array;
- }
- function drawKey(canvas, delimiter, key, label) {
- var combinedArray = new Uint8Array(48);
- if (delimiter.length == 16) {
- for (var i = 0; i < 16; i++) {
- combinedArray[i] = delimiter.charCodeAt(i);
- }
- for (var i = 16; i < 48; i++) {
- combinedArray[i] = key[i - 16];
- }
- } else {
- for (var i = 0; i < 48; i++) {
- combinedArray[i] = Math.floor(i / 8) % 2 == 1 ? 170 : 85;
- }
- }
- var context = canvas.getContext("2d");
- context.fillStyle = "#FFFFFF";
- context.fillRect(0, 0, 64, 64);
- context.fillStyle = "#000000";
- for (var y = 0; y < 24; y++) {
- for (var x = 0; x < 64; x++) {
- var arrayIndex = Math.floor((x + y * 64) / 8) % combinedArray.length;
- var bitIndex = (x + y * 64) % 8;
- var value = bitAtPosition(combinedArray[arrayIndex], bitIndex);
- if (value == 0) {
- context.fillRect(x + (i % 8) * 8, y, 1, 1);
- }
- }
- }
- for (var i = 0; i < combinedArray.length; i++) {
- for (var bit = 0; bit < 8; bit++) {
- var value = bitAtPosition(combinedArray[i], bit);
- if (value == 0) {
- var x0 = (i % 4) * 16 + bit * 2;
- var y0 = Math.floor(i / 4) * 2 + 39;
- context.fillRect(x0, y0, 2, 2);
- }
- }
- }
- context.fillRect(0, 24, 64, 2);
- context.fillRect(0, 37, 64, 2);
- for (var i = 0; i < label.length; i++) {
- var y = 28 + Math.floor(i / 8);
- for (var x = 0; x < 8; x++) {
- var value = bitAtPosition(label[i], x);
- if (value == 0) {
- context.fillRect(x + (i % 8) * 8, y, 1, 1);
- }
- }
- }
- for (var i = 0; i < 64; i += 2) {
- context.fillRect(i, 63, 1, 1);
- }
- }
- function bitAtPosition(value, bitPosition) {
- return (value >> (7 - bitPosition)) & 0x1;
- }
- return generateImages(identifier);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement