From 96a240d948747c08c634fcc454551fa0e9f75c1a Mon Sep 17 00:00:00 2001 From: Kristjan Komlosi Date: Sat, 30 Nov 2024 22:08:57 +0100 Subject: [PATCH] =?UTF-8?q?Re=C5=A1ena=20naloga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a.out | Bin 0 -> 15776 bytes serijske.txt | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++ uuid-gen.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 191 insertions(+) create mode 100755 a.out create mode 100644 serijske.txt create mode 100644 uuid-gen.c diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..0af423f9c02da5389526c678011524f48e8ecf3d GIT binary patch literal 15776 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 // printf za izpis +#include // srand, rand za RNG +#include // time za seedanje PRNG +#include // fiksne velikosti int podatkov +#include // CRC32 +// Kristjan Komloši, 2024 +// UUID generator, 1. domača naloga POKS +// Program se prevede z +// gcc uuid-gen.c -lz + + +// struktura, ki skupaj poveze serijsko, nakljucni uuid in CRC32 +struct uuid_uint128 +{ + uint8_t uuid_byte[16]; + char serial; + uint32_t crc; +}; + +void get_uuid(struct uuid_uint128 *uuid) +{ + // funkcija v pokazano UUID strukturo vpise v4 uuid (nakljucni) s serijsko stevilko in CRCjem + // xx xx xx xx - xx xx - Mx xx - Nx xx - xx xx xx xx xx xx + // M = verzija (0x4) + // N = varianta (0b10xx) + // byte maske za te vrednosti + + static char serial = 1; + const uint8_t version_mask_or = 0x40; + const uint8_t version_mask_and = 0x0F; + const uint8_t variant_mask_or = 0x80; + const uint8_t variant_mask_and = 0x3F; + + uuid->serial = serial++; // nastavimo naslednjo serijsko + + + for (int c = 0; c < sizeof(uuid->uuid_byte); c++) + { + // vzamemo stevilo iz RNG, ga prestavimo v interval [0,255], vpisemo + uuid->uuid_byte[c] = (uint8_t)((double)rand() / RAND_MAX * 255); + } + + // maskiranje bitov za verzijo in varianto + uuid->uuid_byte[6] &= version_mask_and; + uuid->uuid_byte[6] |= version_mask_or; + uuid->uuid_byte[8] &= variant_mask_and; + uuid->uuid_byte[8] |= variant_mask_or; + + // Zlib ima implementacijo CRC-32 + // Glej https://refspecs.linuxbase.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/zlib-crc32-1.html + uuid->crc = crc32(0, Z_NULL, 0); // inicializacija + uuid->crc = crc32(uuid->crc, &uuid->serial, 1); // dodamo serijsko + uuid->crc = crc32(uuid->crc, uuid->uuid_byte, sizeof(uuid->uuid_byte)); // dodamo vse byte UUIDja +}; + +void print_uuid(struct uuid_uint128 uuid) +{ + // funkcija je samo alias za ta dolgovezni printf + printf("%08d-%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x %08x\n", + uuid.serial, + uuid.uuid_byte[0], + uuid.uuid_byte[1], + uuid.uuid_byte[2], + uuid.uuid_byte[3], + uuid.uuid_byte[4], + uuid.uuid_byte[5], + uuid.uuid_byte[6], + uuid.uuid_byte[7], + uuid.uuid_byte[8], + uuid.uuid_byte[9], + uuid.uuid_byte[10], + uuid.uuid_byte[11], + uuid.uuid_byte[12], + uuid.uuid_byte[13], + uuid.uuid_byte[14], + uuid.uuid_byte[15], + uuid.crc + ); +} + +int main(void) +{ + srand(time(NULL)); // seed RNG + struct uuid_uint128 uuid; + for (int i = 0; i < 100; i++) // zaradi racunanja serijske in CRC je maksimum 255 iteracij + { + get_uuid(&uuid); + print_uuid(uuid); + } + +}