2023-12-05 13:28:08 -04:00

76 lines
2.6 KiB
C

/*
* Copyright Notice
* ----------------
* Copyright © 1998, 1999 by: Glenn Randers-Pehrson
* This specification is a modification of the PNG 1.0 specification. It is being
* provided by the copyright holder under the provisions of the 1996 MIT copyright and license:
* Copyright © 1996 by: Massachusetts Institute of Technology (MIT)
* This W3C specification is being provided by the copyright holders under
* the following license. By obtaining, using and/or copying this specification, you
* agree that you have read, understood, and will comply with the following terms
* and conditions:
* Permission to use, copy, and distribute this specification for any purpose
* and without fee or royalty is hereby granted, provided that the full text of
* this NOTICE appears on ALL copies of the specification or portions thereof,
* including modifications, that you make.
* THIS SPECIFICATION IS PROVIDED ”AS IS,” AND COPYRIGHT HOLD-ERS
* MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
* IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT
* HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY
* OR FITNESS FOR ANY PARTICULAR PURPOSE OR
* THAT THE USE OF THE SPECIFICATION WILL NOT INFRINGE ANY
* THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER
* RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY
* USE OF THIS SPECIFICATION.
* The name and trademarks of copyright holders may NOT be used in
* advertising or publicity pertaining to the specification without specific, written
* prior permission. Title to copyright in this specification and any associated
* documentation will at all times remain with copyright holders.
*/
#pragma once
// Needed for uint types
#include <arpa/inet.h>
// http://www.libpng.org/pub/png/spec/1.2/PNG-Rationale.html#R.PNG-file-signature
#define PNG_SIGNATURE "\211PNG\r\n\032\n"
#define PNG_SIGNATURE_SIZE 8
// The key used to "encrypt/decrypt" the PNG chunks
#define KEY 42
typedef struct png_chunk {
uint32_t length;
char type[4];
char *data;
uint32_t crc;
} png_chunk;
// Get FILE from path
int get_fd(char *path);
// Store file in heap memory
char *load_file(char *path);
// Check if file is a PNG
int is_png(char *buffer);
// Get PNG chunk
png_chunk *get_png_chunk(char *buffer, unsigned int offset);
// Get all PNG chunks
png_chunk **get_png_chunks(char *buffer);
// Get number of chunks
int get_number_of_chunks(png_chunk **chunks);
// XOR chunk with key
void xor_data(png_chunk *chunk);
// Destroy all chunks
void destroy_chunks(png_chunk **chunks);
// Write PNG chunks to file
void write_png_chunks(char *path, png_chunk **chunks);