PokerUnicorn
Loading...
Searching...
No Matches
rsa.h
Go to the documentation of this file.
1/*
2 * PokerUnicorn Server
3 * This project uses test network, NO real coin or NO real money involved.
4 * Copyright (C) 2023, Oğuzhan Eroğlu <meowingcate@gmail.com> (https://meowingcat.io)
5 * Licensed under GPLv3 License
6 * See LICENSE for more info
7 */
8
9#pragma once
10
22#include <stdbool.h>
23#include <gmp.h>
24
25#include "ref.h"
26#include "sugar.h"
27#include "string.h"
28#include "stdint.h"
29
30#define PKRSRV_RSA_PUB_EXPONENT 65537
31#define PKRSRV_RSA_PRIME_BITS 2048
32#define PKRSRV_RSA_PRIME_REPS 50
33#define PKRSRV_RSA_BLOCK_SIZE 128
34
35#define PKRSRV_MPZ_ENDIAN 1
36#define PKRSRV_MPZ_ORDER 1
37
39#define PKRSRV_RSA_RANDOM_SEED_ADDS_MASK 20 // 1 to 2 ^ ((sizeof(pkrsrv_rsa_random_seed_adds_t) * 8) - 1)
40
41typedef struct pkrsrv_rsa_keypair pkrsrv_rsa_keypair_t;
42typedef struct pkrsrv_rsa_key pkrsrv_rsa_key_t;
43typedef struct pkrsrv_rsa_encrypted pkrsrv_rsa_encrypted_t;
44
51 mpz_t e;
52 mpz_t n;
53};
54
60 pkrsrv_rsa_key_t* pubkey;
61 pkrsrv_rsa_key_t* privkey;
62};
63
69 pkrsrv_string_t* data;
70 pkrsrv_rsa_key_t* key;
71};
72
73uint32_t pkrsrv_rsa_hash_h32(char* str);
74uint32_t pkrsrv_rsa_hash_h32__n(char* data, ssize_t length);
75
76bool pkrsrv_rsa_random_seed(unsigned char* seed, size_t size);
78
79pkrsrv_rsa_key_t* pkrsrv_rsa_key_new();
80void pkrsrv_rsa_key_free(pkrsrv_rsa_key_t* key);
81pkrsrv_rsa_keypair_t* pkrsrv_rsa_keypair_new();
82void pkrsrv_rsa_keypair_free(pkrsrv_rsa_keypair_t* keypair);
83
84pkrsrv_rsa_encrypted_t* pkrsrv_rsa_encrypted_new();
85void pkrsrv_rsa_encrypted_set_key(pkrsrv_rsa_encrypted_t* encrypted, pkrsrv_rsa_key_t* key);
86void pkrsrv_rsa_encrypted_set_data(pkrsrv_rsa_encrypted_t* encrypted, pkrsrv_string_t* data);
87void pkrsrv_rsa_encrypted_free(pkrsrv_rsa_encrypted_t* encrypted);
88pkrsrv_rsa_encrypted_t* pkrsrv_rsa_encrypt(pkrsrv_string_t* data, pkrsrv_rsa_key_t* pubkey);
89pkrsrv_string_t* pkrsrv_rsa_decrypt(pkrsrv_rsa_encrypted_t* encrypted, pkrsrv_rsa_key_t* privkey);
90
91pkrsrv_string_t* pkrsrv_rsa_key_to_bin(pkrsrv_rsa_key_t* key);
92pkrsrv_rsa_key_t* pkrsrv_rsa_key_from_bin(pkrsrv_string_t* hex);
93
94pkrsrv_string_t* pkrsrv_rsa_key_to_hex(pkrsrv_rsa_key_t* key);
95pkrsrv_rsa_key_t* pkrsrv_rsa_key_from_hex(pkrsrv_string_t* hex);
96
97pkrsrv_string_t* pkrsrv_rsa_sign(pkrsrv_string_t* data, pkrsrv_rsa_key_t* privkey);
98bool pkrsrv_rsa_verify(pkrsrv_string_t* data, pkrsrv_string_t* signature, pkrsrv_rsa_key_t* pubkey);
99pkrsrv_string_t* pkrsrv_rsa_signature_to_hex(pkrsrv_string_t* signature_bin);
100pkrsrv_string_t* pkrsrv_rsa_signature_from_hex(pkrsrv_string_t* signature_hex);
101
#define PKRSRV_REF_COUNTEDIFY()
Makes a structure reference-counted.
Definition ref.h:70
pkrsrv_rsa_key_t * privkey
Definition rsa.h:61
pkrsrv_rsa_key_t * pubkey
Definition rsa.h:60
mpz_t n
Definition rsa.h:52
pkrsrv_string_t * data
Definition rsa.h:69
mpz_t e
Definition rsa.h:51
pkrsrv_rsa_key_t * key
Definition rsa.h:70
void pkrsrv_rsa_key_free(pkrsrv_rsa_key_t *key)
void pkrsrv_rsa_keypair_free(pkrsrv_rsa_keypair_t *keypair)
pkrsrv_string_t * pkrsrv_rsa_signature_to_hex(pkrsrv_string_t *signature_bin)
void pkrsrv_rsa_random_prime(mpz_t num)
pkrsrv_string_t * pkrsrv_rsa_sign(pkrsrv_string_t *data, pkrsrv_rsa_key_t *privkey)
pkrsrv_rsa_keypair_t * pkrsrv_rsa_keypair_new()
pkrsrv_string_t * pkrsrv_rsa_decrypt(pkrsrv_rsa_encrypted_t *encrypted, pkrsrv_rsa_key_t *privkey)
uint8_t pkrsrv_rsa_random_seed_adds_t
Definition rsa.h:38
pkrsrv_rsa_key_t * pkrsrv_rsa_key_new()
pkrsrv_rsa_key_t * pkrsrv_rsa_key_from_hex(pkrsrv_string_t *hex)
pkrsrv_string_t * pkrsrv_rsa_signature_from_hex(pkrsrv_string_t *signature_hex)
pkrsrv_string_t * pkrsrv_rsa_key_to_hex(pkrsrv_rsa_key_t *key)
void pkrsrv_rsa_encrypted_set_key(pkrsrv_rsa_encrypted_t *encrypted, pkrsrv_rsa_key_t *key)
uint32_t pkrsrv_rsa_hash_h32__n(char *data, ssize_t length)
void pkrsrv_rsa_encrypted_set_data(pkrsrv_rsa_encrypted_t *encrypted, pkrsrv_string_t *data)
void pkrsrv_rsa_encrypted_free(pkrsrv_rsa_encrypted_t *encrypted)
bool pkrsrv_rsa_verify(pkrsrv_string_t *data, pkrsrv_string_t *signature, pkrsrv_rsa_key_t *pubkey)
pkrsrv_rsa_key_t * pkrsrv_rsa_key_from_bin(pkrsrv_string_t *hex)
bool pkrsrv_rsa_random_seed(unsigned char *seed, size_t size)
pkrsrv_string_t * pkrsrv_rsa_key_to_bin(pkrsrv_rsa_key_t *key)
pkrsrv_rsa_encrypted_t * pkrsrv_rsa_encrypted_new()
uint32_t pkrsrv_rsa_hash_h32(char *str)
pkrsrv_rsa_encrypted_t * pkrsrv_rsa_encrypt(pkrsrv_string_t *data, pkrsrv_rsa_key_t *pubkey)
Definition rsa.h:67
Definition rsa.h:49
Definition rsa.h:58