Skip to content
Snippets Groups Projects
Select Git revision
  • daf473c89409683b7ff12ac9918e8de836e42cde
  • master default protected
  • hpke
  • ppc-chacha-4core
  • delete-internal-name-mangling
  • master-updates
  • ppc-gcm
  • ppc-chacha-2core
  • refactor-ecc-mod
  • ppc-chacha-core
  • use-mpn_cnd-functions
  • optimize-ecc-invert
  • default-m4-quote-char
  • power-asm-wip
  • test-fat
  • chacha-3core-neon
  • x86_64-salsa20-2core
  • salsa20-2core-neon
  • bcrypt
  • arm-salsa20-chacha-vsra
  • test-shlib-dir
  • nettle_3.6_release_20200429
  • nettle_3.6rc3
  • nettle_3.6rc2
  • nettle_3.6rc1
  • nettle_3.5.1_release_20190627
  • nettle_3.5_release_20190626
  • nettle_3.5rc1
  • nettle_3.4.1_release_20181204
  • nettle_3.4.1rc1
  • nettle_3.4_release_20171119
  • nettle_3.4rc2
  • nettle_3.4rc1
  • nettle_3.3_release_20161001
  • nettle_3.2_release_20160128
  • nettle_3.1.1_release_20150424
  • nettle_3.1_release_20150407
  • nettle_3.1rc3
  • nettle_3.1rc2
  • nettle_3.1rc1
  • nettle_3.0_release_20140607
41 results

rsa-session.h

Blame
  • Forked from Nettle / nettle
    Source project has a limited visibility.
    rsa-session.h 1.67 KiB
    /* Session key definitions for the rsa-encrypt and rsa-decrypt programs.
     */
    
    #ifndef NETTLE_EXAMPLES_RSA_SESSION_H_INCLUDED
    #define NETTLE_EXAMPLES_RSA_SESSION_H_INCLUDED
    
    #include "aes.h"
    #include "cbc.h"
    #include "hmac.h"
    
    #define RSA_VERSION 1
    
    /* Encryption program using the following file format:
    
         uint32_t version = 1;
         uint32_t nsize;
         uint8_t x[nsize];
         uint8_t encrypted[n];
         uint8_t hmac[SHA1_DIGEST_SIZE];
    
       where x is the data
    
         uint32_t version = 1;
         uint8_t aes_key[AES_KEY_SIZE];
         uint8_t iv[AES_BLOCK_SIZE];
         uint8_t hmac_key[SHA1_DIGEST_SIZE];
    
       of size (4 + AES_KEY_SIZE + AES_BLOCK_SIZE + SHA1_DIGEST_SIZE) = 72
       bytes, encrypted using rsa-pkcs1.
    
       The cleartext input is encrypted using aes-cbc. The final block is
       padded as
    
         | data | random octets | padding length |
    
       where the last octet is the padding length, a number between 1 and
       AES_BLOCK_SIZE (inclusive).
    */
    
    struct rsa_session
    {
      struct CBC_CTX(struct aes_ctx, AES_BLOCK_SIZE) aes;
      struct hmac_sha1_ctx hmac;
      struct yarrow256_ctx yarrow;
    };
    
    struct rsa_session_info
    {
      /* Version followed by aes key, iv and mac key */
      uint8_t key[4 + AES_KEY_SIZE + AES_BLOCK_SIZE + SHA1_DIGEST_SIZE];
    };
    
    #define SESSION_VERSION(s) ((s)->key)
    #define SESSION_AES_KEY(s) ((s)->key + 4)
    #define SESSION_IV(s) ((s)->key + 4 + AES_KEY_SIZE)
    #define SESSION_HMAC_KEY(s) ((s)->key + 4 + AES_KEY_SIZE + AES_BLOCK_SIZE)
    
    void
    rsa_session_set_encrypt_key(struct rsa_session *ctx,
    			    const struct rsa_session_info *key);
    
    void
    rsa_session_set_decrypt_key(struct rsa_session *ctx,
    			    const struct rsa_session_info *key);
    
    #endif /* NETTLE_EXAMPLES_RSA_SESSION_H_INCLUDED */