Rizin
unix-like reverse engineering framework and cli tools
zip_crypto_openssl.c File Reference
#include <stdlib.h>
#include "zipint.h"
#include "zip_crypto.h"
#include <limits.h>
#include <openssl/rand.h>

Go to the source code of this file.

Macros

#define USE_OPENSSL_1_0_API
 

Functions

_zip_crypto_aes_t_zip_crypto_aes_new (const zip_uint8_t *key, zip_uint16_t key_size, zip_error_t *error)
 
void _zip_crypto_aes_free (_zip_crypto_aes_t *aes)
 
bool _zip_crypto_aes_encrypt_block (_zip_crypto_aes_t *aes, const zip_uint8_t *in, zip_uint8_t *out)
 
_zip_crypto_hmac_t_zip_crypto_hmac_new (const zip_uint8_t *secret, zip_uint64_t secret_length, zip_error_t *error)
 
void _zip_crypto_hmac_free (_zip_crypto_hmac_t *hmac)
 
bool _zip_crypto_hmac_output (_zip_crypto_hmac_t *hmac, zip_uint8_t *data)
 
ZIP_EXTERN bool zip_secure_random (zip_uint8_t *buffer, zip_uint16_t length)
 

Macro Definition Documentation

◆ USE_OPENSSL_1_0_API

#define USE_OPENSSL_1_0_API

Definition at line 44 of file zip_crypto_openssl.c.

Function Documentation

◆ _zip_crypto_aes_encrypt_block()

bool _zip_crypto_aes_encrypt_block ( _zip_crypto_aes_t aes,
const zip_uint8_t in,
zip_uint8_t out 
)

Definition at line 111 of file zip_crypto_openssl.c.

111  {
112  int len;
113  if (EVP_EncryptUpdate(aes, out, &len, in, ZIP_CRYPTO_AES_BLOCK_LENGTH) != 1) {
114  return false;
115  }
116  return true;
117 }
size_t len
Definition: 6502dis.c:15
const lzma_allocator const uint8_t * in
Definition: block.h:527
const lzma_allocator const uint8_t size_t uint8_t * out
Definition: block.h:528
#define ZIP_CRYPTO_AES_BLOCK_LENGTH
Definition: zip_crypto.h:38

References in, len, out, and ZIP_CRYPTO_AES_BLOCK_LENGTH.

◆ _zip_crypto_aes_free()

void _zip_crypto_aes_free ( _zip_crypto_aes_t aes)

Definition at line 95 of file zip_crypto_openssl.c.

95  {
96  if (aes == NULL) {
97  return;
98  }
99 
100 #ifdef USE_OPENSSL_1_0_API
101  EVP_CIPHER_CTX_cleanup(aes);
102  _zip_crypto_clear(aes, sizeof(*aes));
103  free(aes);
104 #else
105  EVP_CIPHER_CTX_free(aes);
106 #endif
107 }
#define NULL
Definition: cris-opc.c:27
RZ_API void Ht_() free(HtName_(Ht) *ht)
Definition: ht_inc.c:130
#define _zip_crypto_clear(b, l)
Definition: zipint.h:489

References _zip_crypto_clear, free(), and NULL.

◆ _zip_crypto_aes_new()

_zip_crypto_aes_t* _zip_crypto_aes_new ( const zip_uint8_t key,
zip_uint16_t  key_size,
zip_error_t error 
)

Definition at line 49 of file zip_crypto_openssl.c.

49  {
50  _zip_crypto_aes_t *aes;
51  const EVP_CIPHER* cipher_type;
52 
53  switch (key_size) {
54  case 128:
55  cipher_type = EVP_aes_128_ecb();
56  break;
57  case 192:
58  cipher_type = EVP_aes_192_ecb();
59  break;
60  case 256:
61  cipher_type = EVP_aes_256_ecb();
62  break;
63  default:
65  return NULL;
66  }
67 
68 #ifdef USE_OPENSSL_1_0_API
69  if ((aes = (_zip_crypto_aes_t *)malloc(sizeof(*aes))) == NULL) {
71  return NULL;
72  }
73  memset(aes, 0, sizeof(*aes));
74 #else
75  if ((aes = EVP_CIPHER_CTX_new()) == NULL) {
77  return NULL;
78  }
79 #endif
80 
81  if (EVP_EncryptInit_ex(aes, cipher_type, NULL, key, NULL) != 1) {
82 #ifdef USE_OPENSSL_1_0_API
83  free(aes);
84 #else
85  EVP_CIPHER_CTX_free(aes);
86 #endif
88  return NULL;
89  }
90 
91  return aes;
92 }
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence static length const void static len key
Definition: sflib.h:118
return memset(p, 0, total)
#define ZIP_ER_INTERNAL
Definition: zip.h:125
ZIP_EXTERN void zip_error_set(zip_error_t *_Nullable, int, int)
Definition: zip_error.c:126
#define ZIP_ER_MEMORY
Definition: zip.h:119
void * malloc(size_t size)
Definition: malloc.c:123
void error(const char *msg)
Definition: untgz.c:593

References error(), free(), key, malloc(), memset(), NULL, ZIP_ER_INTERNAL, ZIP_ER_MEMORY, and zip_error_set().

◆ _zip_crypto_hmac_free()

void _zip_crypto_hmac_free ( _zip_crypto_hmac_t hmac)

Definition at line 158 of file zip_crypto_openssl.c.

158  {
159  if (hmac == NULL) {
160  return;
161  }
162 
163 #ifdef USE_OPENSSL_1_0_API
164  HMAC_CTX_cleanup(hmac);
165  _zip_crypto_clear(hmac, sizeof(*hmac));
166  free(hmac);
167 #else
168  HMAC_CTX_free(hmac);
169 #endif
170 }

References _zip_crypto_clear, free(), and NULL.

◆ _zip_crypto_hmac_new()

_zip_crypto_hmac_t* _zip_crypto_hmac_new ( const zip_uint8_t secret,
zip_uint64_t  secret_length,
zip_error_t error 
)

Definition at line 121 of file zip_crypto_openssl.c.

121  {
122  _zip_crypto_hmac_t *hmac;
123 
124  if (secret_length > INT_MAX) {
126  return NULL;
127  }
128 
129 #ifdef USE_OPENSSL_1_0_API
130  if ((hmac = (_zip_crypto_hmac_t *)malloc(sizeof(*hmac))) == NULL) {
132  return NULL;
133  }
134 
135  HMAC_CTX_init(hmac);
136 #else
137  if ((hmac = HMAC_CTX_new()) == NULL) {
139  return NULL;
140  }
141 #endif
142 
143  if (HMAC_Init_ex(hmac, secret, (int)secret_length, EVP_sha1(), NULL) != 1) {
145 #ifdef USE_OPENSSL_1_0_API
146  free(hmac);
147 #else
148  HMAC_CTX_free(hmac);
149 #endif
150  return NULL;
151  }
152 
153  return hmac;
154 }
#define INT_MAX
Definition: cp-demangle.c:131
#define ZIP_ER_INVAL
Definition: zip.h:123

References error(), free(), INT_MAX, malloc(), NULL, ZIP_ER_INTERNAL, ZIP_ER_INVAL, ZIP_ER_MEMORY, and zip_error_set().

◆ _zip_crypto_hmac_output()

bool _zip_crypto_hmac_output ( _zip_crypto_hmac_t hmac,
zip_uint8_t data 
)

Definition at line 174 of file zip_crypto_openssl.c.

174  {
175  unsigned int length;
176 
177  return HMAC_Final(hmac, data, &length) == 1;
178 }
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence static length const void static len static semflg const void static shmflg const struct timespec struct timespec static rem const char static group const void length
Definition: sflib.h:133

References length.

◆ zip_secure_random()

ZIP_EXTERN bool zip_secure_random ( zip_uint8_t buffer,
zip_uint16_t  length 
)

Definition at line 182 of file zip_crypto_openssl.c.

182  {
183  return RAND_bytes(buffer, length) == 1;
184 }
Definition: buffer.h:15

References length.