/* * Secure eXtended Message Passing framework * Secure eXtended Transport layer implementation: (libsxt) * - very similar to SSH2/TLS * - using already proven and tested crypto algos * - better than TLS for message passing * * PublicPrivateKeyPairs operation API * * (c) Alexander Vdolainen 2016 * * libsxmp is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * libsxmp is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see ."; * */ #ifndef __SXT_SXTKEY_H__ #define __SXT_SXTKEY_H__ /* some taken code , copyright left in the header */ #define ED25519_PK_LEN 32 #define ED25519_SK_LEN 64 #define ED25519_SIG_LEN 64 typedef uint8_t ed25519_pubkey[ED25519_PK_LEN]; typedef uint8_t ed25519_privkey[ED25519_SK_LEN]; typedef uint8_t ed25519_signature[ED25519_SIG_LEN]; /* flags */ #define SXT_PPKP_PRIVATE (1 << 2) #define SXT_PPKP_PUBLIC (1 << 1) #define SXT_PPKP_IHASH (1 << 1) #define SXT_PPKP_ENCRYPT (1 << 2) /* magic values */ #define PPKP_MAGIC "0xbeef0101" /* here the supported types in SXT */ #define PPKP_ED25519 0xa typedef struct sxtkey_type { uint8_t type; uint8_t flags; ed25519_pubkey *pubkey; ed25519_privkey *privkey; uint64_t hash; void *priv; } sxtkey_t; typedef struct sxtsignature_type { uint8_t type; ed25519_signature *sig; } sxtsignature_t; /* API */ /* allocate a key */ sxtkey_t *sxt_key_alloc(void); /* burn i.e. zero all stuff within key structure to be * hidden in core dump */ void sxt_key_burn(sxtkey_t *); /* free sxt key structure */ void sxt_key_free(sxtkey_t *); /* generate a keypair, depends on type and optional parameter given * the last one leaved for stable API, current ed25519 keys doesn't * need them */ int sxt_key_generate(sxtkey_t *, int , int ); /* key custom hash ops */ int sxt_key_assign_hash(sxtkey_t *, uint64_t); uint64_t sxt_key_hash(const sxtkey_t *); #endif /* __SXT_SXTKEY_H__ */