mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-06-20 20:23:38 +08:00
version 2.5.3
new sms4 api, go api and ciphersuites
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2014 - 2017 The GmSSL Project. All rights reserved.
|
||||
* Copyright (c) 2014 - 2019 The GmSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -50,37 +50,18 @@
|
||||
#ifndef HEADER_SMS4_LCL_H
|
||||
#define HEADER_SMS4_LCL_H
|
||||
|
||||
#include <openssl/sms4.h>
|
||||
#include <openssl/e_os2.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
extern const uint8_t SMS4_S[256];
|
||||
extern const uint32_t SMS4_T[256];
|
||||
extern const uint32_t SMS4_D[65536];
|
||||
|
||||
extern uint8_t SBOX[256];
|
||||
extern uint32_t SBOX32L[256 * 256];
|
||||
extern uint32_t SBOX32H[256 * 256];
|
||||
|
||||
|
||||
#define GET32(pc) ( \
|
||||
((uint32_t)(pc)[0] << 24) ^ \
|
||||
((uint32_t)(pc)[1] << 16) ^ \
|
||||
((uint32_t)(pc)[2] << 8) ^ \
|
||||
((uint32_t)(pc)[3]))
|
||||
|
||||
#define PUT32(st, ct) \
|
||||
(ct)[0] = (uint8_t)((st) >> 24); \
|
||||
(ct)[1] = (uint8_t)((st) >> 16); \
|
||||
(ct)[2] = (uint8_t)((st) >> 8); \
|
||||
(ct)[3] = (uint8_t)(st)
|
||||
|
||||
#define ROT32(x,i) \
|
||||
(((x) << i) | ((x) >> (32-i)))
|
||||
|
||||
#define S32(A) \
|
||||
((SBOX[((A) >> 24) ] << 24) ^ \
|
||||
(SBOX[((A) >> 16) & 0xff] << 16) ^ \
|
||||
(SBOX[((A) >> 8) & 0xff] << 8) ^ \
|
||||
(SBOX[((A)) & 0xff]))
|
||||
#define S32(A) \
|
||||
((SMS4_S[((A) >> 24) ] << 24) ^ \
|
||||
(SMS4_S[((A) >> 16) & 0xff] << 16) ^ \
|
||||
(SMS4_S[((A) >> 8) & 0xff] << 8) ^ \
|
||||
(SMS4_S[((A)) & 0xff]))
|
||||
|
||||
#define ROUNDS(x0, x1, x2, x3, x4) \
|
||||
ROUND(x0, x1, x2, x3, x4, 0); \
|
||||
@@ -116,9 +97,14 @@ extern uint32_t SBOX32H[256 * 256];
|
||||
ROUND(x0, x1, x2, x3, x4, 30); \
|
||||
ROUND(x1, x2, x3, x4, x0, 31)
|
||||
|
||||
void sms4_init_sbox32(void);
|
||||
void sms4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
|
||||
size_t blocks, const sms4_key_t *key, const unsigned char iv[16]);
|
||||
|
||||
# ifdef SMS4_AVX2
|
||||
void sms4_avx2_ecb_encrypt_blocks(const unsigned char *in, unsigned char *out,
|
||||
size_t blocks, const sms4_key_t *key);
|
||||
void sms4_avx2_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
|
||||
size_t blocks, const sms4_key_t *key, const unsigned char iv[16]);
|
||||
# endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user