sodiumTest

Log

Files

Refs

README

sel.h (1670B)

     1 #pragma once
     2 
     3 #include "sodium.h"
     4 
     5 #ifndef u8
     6 #define u8  uint8_t
     7 #endif
     8 
     9 typedef struct {
    10         u8 publicKey[crypto_box_PUBLICKEYBYTES];
    11         u8 secretKey[crypto_box_SECRETKEYBYTES];
    12         u8 remotePublicKey[crypto_box_PUBLICKEYBYTES];
    13         u8 nonce[crypto_box_NONCEBYTES];
    14 } keyst;
    15 
    16 typedef struct {
    17         u8 rx[crypto_kx_SESSIONKEYBYTES];
    18         u8 tx[crypto_kx_SESSIONKEYBYTES];
    19         u8 nonce[crypto_box_NONCEBYTES];
    20 } sessionKeyst;
    21 
    22 #define CLIENT_SESSION_KEYS 0
    23 #define SERVER_SESSION_KEYS 1
    24 
    25 typedef struct {
    26         u8 publicKey[crypto_sign_PUBLICKEYBYTES];
    27         u8 secretKey[crypto_sign_SECRETKEYBYTES];
    28 } signKeyst;
    29 
    30 extern signKeyst identityKeys;
    31 extern u8 remoteId[crypto_sign_PUBLICKEYBYTES];
    32 extern sessionKeyst sessionKeys;
    33 extern keyst keys;
    34 /*
    35 These functions return 0 when they fail.
    36 */
    37 
    38 int selInit(void);
    39 void newKeys(void);
    40 void newKeysBuf(keyst *keys);
    41 void newSignKeys(void);
    42 void newSignKeysBuf(signKeyst *keys);
    43 int selPublicEncrypt(u8 *ciphertext/*result*/, size_t csize, const u8 *msg, size_t mlen, keyst *keys);
    44 int selPublicDecrypt(u8 *msg/*result*/, size_t msize, const u8 *ciphertext, size_t clen, keyst *keys);
    45 int computeSharedKeys(int clientOrServer);
    46 int computeSharedKeysBuf(int clientOrServer, sessionKeyst *sessionKeys, keyst *clientKeys);
    47 // secret/symetric key encryption
    48 int selEncrypt(u8 *ciphertext/*result*/, size_t csize, const u8 *msg, size_t mlen);
    49 int selEncryptBuf(u8 *ciphertext/*result*/, size_t csize, const u8 *msg, size_t mlen, const u8 *nonce, const u8 *k);
    50 int selDecrypt(u8 *msg/*result*/, size_t msize, const u8 *ciphertext, size_t clen);
    51 int selDecryptBuf(u8 *msg/*result*/, size_t msize, const u8 *ciphertext, size_t clen, const u8 *nonce, const u8 *k);