php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
hash_gost.c File Reference
#include "php_hash.h"
#include "php_hash_gost.h"
#include "php_hash_gost_tables.h"

Go to the source code of this file.

Macros

#define round(tables, k1, k2)
 
#define R(tables, key, h, i, t, l, r)
 
#define X(w, u, v)
 
#define P(key, w)
 
#define A(x, l, r)
 
#define AA(x, l, r)
 
#define C(x)
 
#define S(s, l, r)
 
#define SHIFT12(u, m, s)
 
#define SHIFT16(h, v, u)
 
#define SHIFT61(h, v)
 
#define PASS(tables)
 

Functions

PHP_HASH_API void PHP_GOSTInit (PHP_GOST_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args)
 
PHP_HASH_API void PHP_GOSTInitCrypto (PHP_GOST_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args)
 
PHP_HASH_API void PHP_GOSTUpdate (PHP_GOST_CTX *context, const unsigned char *input, size_t len)
 
PHP_HASH_API void PHP_GOSTFinal (unsigned char digest[32], PHP_GOST_CTX *context)
 

Variables

const php_hash_ops php_hash_gost_ops
 
const php_hash_ops php_hash_gost_crypto_ops
 

Macro Definition Documentation

◆ A

#define A ( x,
l,
r )
Value:
l = x[0] ^ x[2]; \
r = x[1] ^ x[3]; \
x[0] = x[2]; \
x[1] = x[3]; \
x[2] = x[4]; \
x[3] = x[5]; \
x[4] = x[6]; \
x[5] = x[7]; \
x[6] = l; \
x[7] = r;

Definition at line 85 of file hash_gost.c.

◆ AA

#define AA ( x,
l,
r )
Value:
l = x[0]; \
r = x[2]; \
x[0] = x[4]; \
x[2] = x[6]; \
x[4] = l ^ r; \
x[6] = x[0] ^ r; \
l = x[1]; \
r = x[3]; \
x[1] = x[5]; \
x[3] = x[7]; \
x[5] = l ^ r; \
x[7] = x[1] ^ r;

Definition at line 97 of file hash_gost.c.

◆ C

#define C ( x)
Value:
x[0] ^= 0xff00ff00; \
x[1] ^= 0xff00ff00; \
x[2] ^= 0x00ff00ff; \
x[3] ^= 0x00ff00ff; \
x[4] ^= 0x00ffff00; \
x[5] ^= 0xff0000ff; \
x[6] ^= 0x000000ff; \
x[7] ^= 0xff00ffff;

Definition at line 111 of file hash_gost.c.

◆ P

#define P ( key,
w )
Value:
key[0] = (w[0] & 0x000000ff) | ((w[2] & 0x000000ff) << 8) | \
((w[4] & 0x000000ff) << 16) | ((w[6] & 0x000000ff) << 24); \
key[1] = ((w[0] & 0x0000ff00) >> 8) | (w[2] & 0x0000ff00) | \
((w[4] & 0x0000ff00) << 8) | ((w[6] & 0x0000ff00) << 16); \
key[2] = ((w[0] & 0x00ff0000) >> 16) | ((w[2] & 0x00ff0000) >> 8) | \
(w[4] & 0x00ff0000) | ((w[6] & 0x00ff0000) << 8); \
key[3] = ((w[0] & 0xff000000) >> 24) | ((w[2] & 0xff000000) >> 16) | \
((w[4] & 0xff000000) >> 8) | (w[6] & 0xff000000); \
key[4] = (w[1] & 0x000000ff) | ((w[3] & 0x000000ff) << 8) | \
((w[5] & 0x000000ff) << 16) | ((w[7] & 0x000000ff) << 24); \
key[5] = ((w[1] & 0x0000ff00) >> 8) | (w[3] & 0x0000ff00) | \
((w[5] & 0x0000ff00) << 8) | ((w[7] & 0x0000ff00) << 16); \
key[6] = ((w[1] & 0x00ff0000) >> 16) | ((w[3] & 0x00ff0000) >> 8) | \
(w[5] & 0x00ff0000) | ((w[7] & 0x00ff0000) << 8); \
key[7] = ((w[1] & 0xff000000) >> 24) | ((w[3] & 0xff000000) >> 16) | \
((w[5] & 0xff000000) >> 8) | (w[7] & 0xff000000);
unsigned char key[REFLECTION_KEY_LEN]

Definition at line 67 of file hash_gost.c.

◆ PASS

#define PASS ( tables)
Value:
X(w, u, v); \
P(key, w); \
R((tables), key, h, i, t, l, r); \
S(s, l, r); \
if (i != 6) { \
A(u, l, r); \
if (i == 2) { \
C(u); \
} \
AA(v, l, r); \
}
char s[4]
Definition cdf.c:77
uint32_t v
Definition cdf.c:1237
uint32_t u
Definition cdf.c:78
#define X
Definition encoding.c:238

Definition at line 193 of file hash_gost.c.

◆ R

#define R ( tables,
key,
h,
i,
t,
l,
r )
Value:
r = h[i]; \
l = h[i + 1]; \
round(tables, key[0], key[1]) \
round(tables, key[2], key[3]) \
round(tables, key[4], key[5]) \
round(tables, key[6], key[7]) \
round(tables, key[0], key[1]) \
round(tables, key[2], key[3]) \
round(tables, key[4], key[5]) \
round(tables, key[6], key[7]) \
round(tables, key[0], key[1]) \
round(tables, key[2], key[3]) \
round(tables, key[4], key[5]) \
round(tables, key[6], key[7]) \
round(tables, key[7], key[6]) \
round(tables, key[5], key[4]) \
round(tables, key[3], key[2]) \
round(tables, key[1], key[0]) \
t = r; \
r = l; \
l = t; \

Definition at line 34 of file hash_gost.c.

◆ round

#define round ( tables,
k1,
k2 )
Value:
t = (k1) + r; \
l ^= tables[0][t & 0xff] ^ tables[1][(t >> 8) & 0xff] ^ \
tables[2][(t >> 16) & 0xff] ^ tables[3][t >> 24]; \
t = (k2) + l; \
r ^= tables[0][t & 0xff] ^ tables[1][(t >> 8) & 0xff] ^ \
tables[2][(t >> 16) & 0xff] ^ tables[3][t >> 24];

Definition at line 26 of file hash_gost.c.

◆ S

#define S ( s,
l,
r )
Value:
s[i] = r; \
s[i + 1] = l;

Definition at line 121 of file hash_gost.c.

◆ SHIFT12

#define SHIFT12 ( u,
m,
s )
Value:
u[0] = m[0] ^ s[6]; \
u[1] = m[1] ^ s[7]; \
u[2] = m[2] ^ (s[0] << 16) ^ (s[0] >> 16) ^ (s[0] & 0xffff) ^ \
(s[1] & 0xffff) ^ (s[1] >> 16) ^ (s[2] << 16) ^ s[6] ^ (s[6] << 16) ^ \
(s[7] & 0xffff0000) ^ (s[7] >> 16); \
u[3] = m[3] ^ (s[0] & 0xffff) ^ (s[0] << 16) ^ (s[1] & 0xffff) ^ \
(s[1] << 16) ^ (s[1] >> 16) ^ (s[2] << 16) ^ (s[2] >> 16) ^ \
(s[3] << 16) ^ s[6] ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ \
(s[7] << 16) ^ (s[7] >> 16); \
u[4] = m[4] ^ \
(s[0] & 0xffff0000) ^ (s[0] << 16) ^ (s[0] >> 16) ^ \
(s[1] & 0xffff0000) ^ (s[1] >> 16) ^ (s[2] << 16) ^ (s[2] >> 16) ^ \
(s[3] << 16) ^ (s[3] >> 16) ^ (s[4] << 16) ^ (s[6] << 16) ^ \
(s[6] >> 16) ^(s[7] & 0xffff) ^ (s[7] << 16) ^ (s[7] >> 16); \
u[5] = m[5] ^ (s[0] << 16) ^ (s[0] >> 16) ^ (s[0] & 0xffff0000) ^ \
(s[1] & 0xffff) ^ s[2] ^ (s[2] >> 16) ^ (s[3] << 16) ^ (s[3] >> 16) ^ \
(s[4] << 16) ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[6] << 16) ^ \
(s[6] >> 16) ^ (s[7] & 0xffff0000) ^ (s[7] << 16) ^ (s[7] >> 16); \
u[6] = m[6] ^ s[0] ^ (s[1] >> 16) ^ (s[2] << 16) ^ s[3] ^ (s[3] >> 16) ^ \
(s[4] << 16) ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[5] >> 16) ^ s[6] ^ \
(s[6] << 16) ^ (s[6] >> 16) ^ (s[7] << 16); \
u[7] = m[7] ^ (s[0] & 0xffff0000) ^ (s[0] << 16) ^ (s[1] & 0xffff) ^ \
(s[1] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ s[4] ^ (s[4] >> 16) ^ \
(s[5] << 16) ^ (s[5] >> 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ \
(s[7] << 16) ^ (s[7] >> 16);

Definition at line 125 of file hash_gost.c.

◆ SHIFT16

#define SHIFT16 ( h,
v,
u )
Value:
v[0] = h[0] ^ (u[1] << 16) ^ (u[0] >> 16); \
v[1] = h[1] ^ (u[2] << 16) ^ (u[1] >> 16); \
v[2] = h[2] ^ (u[3] << 16) ^ (u[2] >> 16); \
v[3] = h[3] ^ (u[4] << 16) ^ (u[3] >> 16); \
v[4] = h[4] ^ (u[5] << 16) ^ (u[4] >> 16); \
v[5] = h[5] ^ (u[6] << 16) ^ (u[5] >> 16); \
v[6] = h[6] ^ (u[7] << 16) ^ (u[6] >> 16); \
v[7] = h[7] ^ (u[0] & 0xffff0000) ^ (u[0] << 16) ^ (u[7] >> 16) ^ \
(u[1] & 0xffff0000) ^ (u[1] << 16) ^ (u[6] << 16) ^ (u[7] & 0xffff0000);

Definition at line 152 of file hash_gost.c.

◆ SHIFT61

#define SHIFT61 ( h,
v )
Value:
h[0] = (v[0] & 0xffff0000) ^ (v[0] << 16) ^ (v[0] >> 16) ^ (v[1] >> 16) ^ \
(v[1] & 0xffff0000) ^ (v[2] << 16) ^ (v[3] >> 16) ^ (v[4] << 16) ^ \
(v[5] >> 16) ^ v[5] ^ (v[6] >> 16) ^ (v[7] << 16) ^ (v[7] >> 16) ^ \
(v[7] & 0xffff); \
h[1] = (v[0] << 16) ^ (v[0] >> 16) ^ (v[0] & 0xffff0000) ^ (v[1] & 0xffff) ^ \
v[2] ^ (v[2] >> 16) ^ (v[3] << 16) ^ (v[4] >> 16) ^ (v[5] << 16) ^ \
(v[6] << 16) ^ v[6] ^ (v[7] & 0xffff0000) ^ (v[7] >> 16); \
h[2] = (v[0] & 0xffff) ^ (v[0] << 16) ^ (v[1] << 16) ^ (v[1] >> 16) ^ \
(v[1] & 0xffff0000) ^ (v[2] << 16) ^ (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ \
(v[5] >> 16) ^ v[6] ^ (v[6] >> 16) ^ (v[7] & 0xffff) ^ (v[7] << 16) ^ \
(v[7] >> 16); \
h[3] = (v[0] << 16) ^ (v[0] >> 16) ^ (v[0] & 0xffff0000) ^ \
(v[1] & 0xffff0000) ^ (v[1] >> 16) ^ (v[2] << 16) ^ (v[2] >> 16) ^ v[2] ^ \
(v[3] << 16) ^ (v[4] >> 16) ^ v[4] ^ (v[5] << 16) ^ (v[6] << 16) ^ \
(v[7] & 0xffff) ^ (v[7] >> 16); \
h[4] = (v[0] >> 16) ^ (v[1] << 16) ^ v[1] ^ (v[2] >> 16) ^ v[2] ^ \
(v[3] << 16) ^ (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ (v[5] >> 16) ^ \
v[5] ^ (v[6] << 16) ^ (v[6] >> 16) ^ (v[7] << 16); \
h[5] = (v[0] << 16) ^ (v[0] & 0xffff0000) ^ (v[1] << 16) ^ (v[1] >> 16) ^ \
(v[1] & 0xffff0000) ^ (v[2] << 16) ^ v[2] ^ (v[3] >> 16) ^ v[3] ^ \
(v[4] << 16) ^ (v[4] >> 16) ^ v[4] ^ (v[5] << 16) ^ (v[6] << 16) ^ \
(v[6] >> 16) ^ v[6] ^ (v[7] << 16) ^ (v[7] >> 16) ^ (v[7] & 0xffff0000); \
h[6] = v[0] ^ v[2] ^ (v[2] >> 16) ^ v[3] ^ (v[3] << 16) ^ v[4] ^ \
(v[4] >> 16) ^ (v[5] << 16) ^ (v[5] >> 16) ^ v[5] ^ (v[6] << 16) ^ \
(v[6] >> 16) ^ v[6] ^ (v[7] << 16) ^ v[7]; \
h[7] = v[0] ^ (v[0] >> 16) ^ (v[1] << 16) ^ (v[1] >> 16) ^ (v[2] << 16) ^ \
(v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ v[4] ^ (v[5] >> 16) ^ v[5] ^ \
(v[6] << 16) ^ (v[6] >> 16) ^ (v[7] << 16) ^ v[7];

Definition at line 163 of file hash_gost.c.

◆ X

#define X ( w,
u,
v )
Value:
w[0] = u[0] ^ v[0]; \
w[1] = u[1] ^ v[1]; \
w[2] = u[2] ^ v[2]; \
w[3] = u[3] ^ v[3]; \
w[4] = u[4] ^ v[4]; \
w[5] = u[5] ^ v[5]; \
w[6] = u[6] ^ v[6]; \
w[7] = u[7] ^ v[7];

Definition at line 57 of file hash_gost.c.

Function Documentation

◆ PHP_GOSTFinal()

PHP_HASH_API void PHP_GOSTFinal ( unsigned char digest[32],
PHP_GOST_CTX * context )

Definition at line 284 of file hash_gost.c.

◆ PHP_GOSTInit()

PHP_HASH_API void PHP_GOSTInit ( PHP_GOST_CTX * context,
ZEND_ATTRIBUTE_UNUSED HashTable * args )

Definition at line 238 of file hash_gost.c.

◆ PHP_GOSTInitCrypto()

PHP_HASH_API void PHP_GOSTInitCrypto ( PHP_GOST_CTX * context,
ZEND_ATTRIBUTE_UNUSED HashTable * args )

Definition at line 244 of file hash_gost.c.

◆ PHP_GOSTUpdate()

PHP_HASH_API void PHP_GOSTUpdate ( PHP_GOST_CTX * context,
const unsigned char * input,
size_t len )

Definition at line 252 of file hash_gost.c.

Variable Documentation

◆ php_hash_gost_crypto_ops

const php_hash_ops php_hash_gost_crypto_ops
Initial value:
= {
"gost-crypto",
php_gost_unserialize,
32,
32,
sizeof(PHP_GOST_CTX),
1
}
PHP_HASH_API zend_result php_hash_serialize(const php_hashcontext_object *hash, zend_long *magic, zval *zv)
Definition hash.c:334
PHP_HASH_API zend_result php_hash_copy(const void *ops, const void *orig_context, void *dest_context)
Definition hash.c:124
PHP_HASH_API void PHP_GOSTInitCrypto(PHP_GOST_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args)
Definition hash_gost.c:244
PHP_HASH_API void PHP_GOSTUpdate(PHP_GOST_CTX *context, const unsigned char *input, size_t len)
Definition hash_gost.c:252
PHP_HASH_API void PHP_GOSTFinal(unsigned char digest[32], PHP_GOST_CTX *context)
Definition hash_gost.c:284
void(* php_hash_final_func_t)(unsigned char *digest, void *context)
Definition php_hash.h:36
void(* php_hash_init_func_t)(void *context, HashTable *args)
Definition php_hash.h:34
void(* php_hash_update_func_t)(void *context, const unsigned char *buf, size_t count)
Definition php_hash.h:35
#define PHP_GOST_SPEC

Definition at line 335 of file hash_gost.c.

◆ php_hash_gost_ops

const php_hash_ops php_hash_gost_ops
Initial value:
= {
"gost",
php_gost_unserialize,
32,
32,
sizeof(PHP_GOST_CTX),
1
}
PHP_HASH_API void PHP_GOSTInit(PHP_GOST_CTX *context, ZEND_ATTRIBUTE_UNUSED HashTable *args)
Definition hash_gost.c:238

Definition at line 320 of file hash_gost.c.